!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&module.exports?module.exports=function(t,r){return void 0===r&&(r="undefined"!=typeof window?require("jquery"):require("jquery")(t)),e(r),r}:e(jQuery)}(function(e){"use strict";function t(t){var r=t.data;t.isDefaultPrevented()||(t.preventDefault(),e(t.target).closest("form").ajaxSubmit(r))}function r(t){var r=t.target,a=e(r);if(!a.is("[type=submit],[type=image]")){var n=a.closest("[type=submit]");if(0===n.length)return;r=n[0]}var i=r.form;if(i.clk=r,"image"===r.type)if(void 0!==t.offsetX)i.clk_x=t.offsetX,i.clk_y=t.offsetY;else if("function"==typeof e.fn.offset){var o=a.offset();i.clk_x=t.pageX-o.left,i.clk_y=t.pageY-o.top}else i.clk_x=t.pageX-r.offsetLeft,i.clk_y=t.pageY-r.offsetTop;setTimeout(function(){i.clk=i.clk_x=i.clk_y=null},100)}function a(){if(e.fn.ajaxSubmit.debug){var t="[jquery.form] "+Array.prototype.join.call(arguments,"");window.console&&window.console.log?window.console.log(t):window.opera&&window.opera.postError&&window.opera.postError(t)}}var n=/\r?\n/g,i={};i.fileapi=void 0!==e('<input type="file">').get(0).files,i.formdata=void 0!==window.FormData;var o=!!e.fn.prop;e.fn.attr2=function(){if(!o)return this.attr.apply(this,arguments);var e=this.prop.apply(this,arguments);return e&&e.jquery||"string"==typeof e?e:this.attr.apply(this,arguments)},e.fn.ajaxSubmit=function(t,r,n,s){function u(r){var a,n,i=e.param(r,t.traditional).split("&"),o=i.length,s=[];for(a=0;a<o;a++)i[a]=i[a].replace(/\+/g," "),n=i[a].split("="),s.push([decodeURIComponent(n[0]),decodeURIComponent(n[1])]);return s}function c(r){function n(e){var t=null;try{e.contentWindow&&(t=e.contentWindow.document)}catch(e){a("cannot get iframe.contentWindow document: "+e)}if(t)return t;try{t=e.contentDocument?e.contentDocument:e.document}catch(r){a("cannot get iframe.contentDocument: "+r),t=e.document}return t}function i(){function t(){try{var e=n(v).readyState;a("state = "+e),e&&"uninitialized"===e.toLowerCase()&&setTimeout(t,50)}catch(e){a("Server abort: ",e," (",e.name,")"),s(L),j&&clearTimeout(j),j=void 0}}var r=p.attr2("target"),i=p.attr2("action"),o=p.attr("enctype")||p.attr("encoding")||"multipart/form-data";w.setAttribute("target",m),l&&!/post/i.test(l)||w.setAttribute("method","POST"),i!==f.url&&w.setAttribute("action",f.url),f.skipEncodingOverride||l&&!/post/i.test(l)||p.attr({encoding:"multipart/form-data",enctype:"multipart/form-data"}),f.timeout&&(j=setTimeout(function(){T=!0,s(A)},f.timeout));var u=[];try{if(f.extraData)for(var c in f.extraData)f.extraData.hasOwnProperty(c)&&(e.isPlainObject(f.extraData[c])&&f.extraData[c].hasOwnProperty("name")&&f.extraData[c].hasOwnProperty("value")?u.push(e('<input type="hidden" name="'+f.extraData[c].name+'">',k).val(f.extraData[c].value).appendTo(w)[0]):u.push(e('<input type="hidden" name="'+c+'">',k).val(f.extraData[c]).appendTo(w)[0]));f.iframeTarget||h.appendTo(D),v.attachEvent?v.attachEvent("onload",s):v.addEventListener("load",s,!1),setTimeout(t,15);try{w.submit()}catch(e){document.createElement("form").submit.apply(w)}}finally{w.setAttribute("action",i),w.setAttribute("enctype",o),r?w.setAttribute("target",r):p.removeAttr("target"),e(u).remove()}}function s(t){if(!x.aborted&&!X){if((O=n(v))||(a("cannot access response document"),t=L),t===A&&x)return x.abort("timeout"),void S.reject(x,"timeout");if(t===L&&x)return x.abort("server abort"),void S.reject(x,"error","server abort");if(O&&O.location.href!==f.iframeSrc||T){v.detachEvent?v.detachEvent("onload",s):v.removeEventListener("load",s,!1);var r,i="success";try{if(T)throw"timeout";var o="xml"===f.dataType||O.XMLDocument||e.isXMLDoc(O);if(a("isXml="+o),!o&&window.opera&&(null===O.body||!O.body.innerHTML)&&--C)return a("requeing onLoad callback, DOM not available"),void setTimeout(s,250);var u=O.body?O.body:O.documentElement;x.responseText=u?u.innerHTML:null,x.responseXML=O.XMLDocument?O.XMLDocument:O,o&&(f.dataType="xml"),x.getResponseHeader=function(e){return{"content-type":f.dataType}[e.toLowerCase()]},u&&(x.status=Number(u.getAttribute("status"))||x.status,x.statusText=u.getAttribute("statusText")||x.statusText);var c=(f.dataType||"").toLowerCase(),l=/(json|script|text)/.test(c);if(l||f.textarea){var p=O.getElementsByTagName("textarea")[0];if(p)x.responseText=p.value,x.status=Number(p.getAttribute("status"))||x.status,x.statusText=p.getAttribute("statusText")||x.statusText;else if(l){var m=O.getElementsByTagName("pre")[0],g=O.getElementsByTagName("body")[0];m?x.responseText=m.textContent?m.textContent:m.innerText:g&&(x.responseText=g.textContent?g.textContent:g.innerText)}}else"xml"===c&&!x.responseXML&&x.responseText&&(x.responseXML=q(x.responseText));try{M=N(x,c,f)}catch(e){i="parsererror",x.error=r=e||i}}catch(e){a("error caught: ",e),i="error",x.error=r=e||i}x.aborted&&(a("upload aborted"),i=null),x.status&&(i=x.status>=200&&x.status<300||304===x.status?"success":"error"),"success"===i?(f.success&&f.success.call(f.context,M,"success",x),S.resolve(x.responseText,"success",x),d&&e.event.trigger("ajaxSuccess",[x,f])):i&&(void 0===r&&(r=x.statusText),f.error&&f.error.call(f.context,x,i,r),S.reject(x,"error",r),d&&e.event.trigger("ajaxError",[x,f,r])),d&&e.event.trigger("ajaxComplete",[x,f]),d&&!--e.active&&e.event.trigger("ajaxStop"),f.complete&&f.complete.call(f.context,x,i),X=!0,f.timeout&&clearTimeout(j),setTimeout(function(){f.iframeTarget?h.attr("src",f.iframeSrc):h.remove(),x.responseXML=null},100)}}}var u,c,f,d,m,h,v,x,y,b,T,j,w=p[0],S=e.Deferred();if(S.abort=function(e){x.abort(e)},r)for(c=0;c<g.length;c++)u=e(g[c]),o?u.prop("disabled",!1):u.removeAttr("disabled");(f=e.extend(!0,{},e.ajaxSettings,t)).context=f.context||f,m="jqFormIO"+(new Date).getTime();var k=w.ownerDocument,D=p.closest("body");if(f.iframeTarget?(b=(h=e(f.iframeTarget,k)).attr2("name"))?m=b:h.attr2("name",m):(h=e('<iframe name="'+m+'" src="'+f.iframeSrc+'" />',k)).css({position:"absolute",top:"-1000px",left:"-1000px"}),v=h[0],x={aborted:0,responseText:null,responseXML:null,status:0,statusText:"n/a",getAllResponseHeaders:function(){},getResponseHeader:function(){},setRequestHeader:function(){},abort:function(t){var r="timeout"===t?"timeout":"aborted";a("aborting upload... "+r),this.aborted=1;try{v.contentWindow.document.execCommand&&v.contentWindow.document.execCommand("Stop")}catch(e){}h.attr("src",f.iframeSrc),x.error=r,f.error&&f.error.call(f.context,x,r,t),d&&e.event.trigger("ajaxError",[x,f,r]),f.complete&&f.complete.call(f.context,x,r)}},(d=f.global)&&0==e.active++&&e.event.trigger("ajaxStart"),d&&e.event.trigger("ajaxSend",[x,f]),f.beforeSend&&!1===f.beforeSend.call(f.context,x,f))return f.global&&e.active--,S.reject(),S;if(x.aborted)return S.reject(),S;(y=w.clk)&&(b=y.name)&&!y.disabled&&(f.extraData=f.extraData||{},f.extraData[b]=y.value,"image"===y.type&&(f.extraData[b+".x"]=w.clk_x,f.extraData[b+".y"]=w.clk_y));var A=1,L=2,F=e("meta[name=csrf-token]").attr("content"),E=e("meta[name=csrf-param]").attr("content");E&&F&&(f.extraData=f.extraData||{},f.extraData[E]=F),f.forceSync?i():setTimeout(i,10);var M,O,X,C=50,q=e.parseXML||function(e,t){return window.ActiveXObject?((t=new ActiveXObject("Microsoft.XMLDOM")).async="false",t.loadXML(e)):t=(new DOMParser).parseFromString(e,"text/xml"),t&&t.documentElement&&"parsererror"!==t.documentElement.nodeName?t:null},_=e.parseJSON||function(e){return window.eval("("+e+")")},N=function(t,r,a){var n=t.getResponseHeader("content-type")||"",i=("xml"===r||!r)&&n.indexOf("xml")>=0,o=i?t.responseXML:t.responseText;return i&&"parsererror"===o.documentElement.nodeName&&e.error&&e.error("parsererror"),a&&a.dataFilter&&(o=a.dataFilter(o,r)),"string"==typeof o&&(("json"===r||!r)&&n.indexOf("json")>=0?o=_(o):("script"===r||!r)&&n.indexOf("javascript")>=0&&e.globalEval(o)),o};return S}if(!this.length)return a("ajaxSubmit: skipping submit process - no element selected"),this;var l,f,d,p=this;"function"==typeof t?t={success:t}:"string"==typeof t||!1===t&&arguments.length>0?(t={url:t,data:r,dataType:n},"function"==typeof s&&(t.success=s)):void 0===t&&(t={}),l=t.method||t.type||this.attr2("method"),(d=(d="string"==typeof(f=t.url||this.attr2("action"))?e.trim(f):"")||window.location.href||"")&&(d=(d.match(/^([^#]+)/)||[])[1]),t=e.extend(!0,{url:d,success:e.ajaxSettings.success,type:l||e.ajaxSettings.type,iframeSrc:/^https/i.test(window.location.href||"")?"javascript:false":"about:blank"},t);var m={};if(this.trigger("form-pre-serialize",[this,t,m]),m.veto)return a("ajaxSubmit: submit vetoed via form-pre-serialize trigger"),this;if(t.beforeSerialize&&!1===t.beforeSerialize(this,t))return a("ajaxSubmit: submit aborted via beforeSerialize callback"),this;var h=t.traditional;void 0===h&&(h=e.ajaxSettings.traditional);var v,g=[],x=this.formToArray(t.semantic,g,t.filtering);if(t.data){var y=e.isFunction(t.data)?t.data(x):t.data;t.extraData=y,v=e.param(y,h)}if(t.beforeSubmit&&!1===t.beforeSubmit(x,this,t))return a("ajaxSubmit: submit aborted via beforeSubmit callback"),this;if(this.trigger("form-submit-validate",[x,this,t,m]),m.veto)return a("ajaxSubmit: submit vetoed via form-submit-validate trigger"),this;var b=e.param(x,h);v&&(b=b?b+"&"+v:v),"GET"===t.type.toUpperCase()?(t.url+=(t.url.indexOf("?")>=0?"&":"?")+b,t.data=null):t.data=b;var T=[];if(t.resetForm&&T.push(function(){p.resetForm()}),t.clearForm&&T.push(function(){p.clearForm(t.includeHidden)}),!t.dataType&&t.target){var j=t.success||function(){};T.push(function(r,a,n){var i=arguments,o=t.replaceTarget?"replaceWith":"html";e(t.target)[o](r).each(function(){j.apply(this,i)})})}else t.success&&(e.isArray(t.success)?e.merge(T,t.success):T.push(t.success));if(t.success=function(e,r,a){for(var n=t.context||this,i=0,o=T.length;i<o;i++)T[i].apply(n,[e,r,a||p,p])},t.error){var w=t.error;t.error=function(e,r,a){var n=t.context||this;w.apply(n,[e,r,a,p])}}if(t.complete){var S=t.complete;t.complete=function(e,r){var a=t.context||this;S.apply(a,[e,r,p])}}var k=e("input[type=file]:enabled",this).filter(function(){return""!==e(this).val()}).length>0,D="multipart/form-data",A=p.attr("enctype")===D||p.attr("encoding")===D,L=i.fileapi&&i.formdata;a("fileAPI :"+L);var F,E=(k||A)&&!L;!1!==t.iframe&&(t.iframe||E)?t.closeKeepAlive?e.get(t.closeKeepAlive,function(){F=c(x)}):F=c(x):F=(k||A)&&L?function(r){for(var a=new FormData,n=0;n<r.length;n++)a.append(r[n].name,r[n].value);if(t.extraData){var i=u(t.extraData);for(n=0;n<i.length;n++)i[n]&&a.append(i[n][0],i[n][1])}t.data=null;var o=e.extend(!0,{},e.ajaxSettings,t,{contentType:!1,processData:!1,cache:!1,type:l||"POST"});t.uploadProgress&&(o.xhr=function(){var r=e.ajaxSettings.xhr();return r.upload&&r.upload.addEventListener("progress",function(e){var r=0,a=e.loaded||e.position,n=e.total;e.lengthComputable&&(r=Math.ceil(a/n*100)),t.uploadProgress(e,a,n,r)},!1),r}),o.data=null;var s=o.beforeSend;return o.beforeSend=function(e,r){t.formData?r.data=t.formData:r.data=a,s&&s.call(this,e,r)},e.ajax(o)}(x):e.ajax(t),p.removeData("jqxhr").data("jqxhr",F);for(var M=0;M<g.length;M++)g[M]=null;return this.trigger("form-submit-notify",[this,t]),this},e.fn.ajaxForm=function(n,i,o,s){if(("string"==typeof n||!1===n&&arguments.length>0)&&(n={url:n,data:i,dataType:o},"function"==typeof s&&(n.success=s)),n=n||{},n.delegation=n.delegation&&e.isFunction(e.fn.on),!n.delegation&&0===this.length){var u={s:this.selector,c:this.context};return!e.isReady&&u.s?(a("DOM not ready, queuing ajaxForm"),e(function(){e(u.s,u.c).ajaxForm(n)}),this):(a("terminating; zero elements found by selector"+(e.isReady?"":" (DOM not ready)")),this)}return n.delegation?(e(document).off("submit.form-plugin",this.selector,t).off("click.form-plugin",this.selector,r).on("submit.form-plugin",this.selector,n,t).on("click.form-plugin",this.selector,n,r),this):this.ajaxFormUnbind().on("submit.form-plugin",n,t).on("click.form-plugin",n,r)},e.fn.ajaxFormUnbind=function(){return this.off("submit.form-plugin click.form-plugin")},e.fn.formToArray=function(t,r,a){var n=[];if(0===this.length)return n;var o,s=this[0],u=this.attr("id"),c=t||void 0===s.elements?s.getElementsByTagName("*"):s.elements;if(c&&(c=e.makeArray(c)),u&&(t||/(Edge|Trident)\//.test(navigator.userAgent))&&(o=e(':input[form="'+u+'"]').get()).length&&(c=(c||[]).concat(o)),!c||!c.length)return n;e.isFunction(a)&&(c=e.map(c,a));var l,f,d,p,m,h,v;for(l=0,h=c.length;l<h;l++)if(m=c[l],(d=m.name)&&!m.disabled)if(t&&s.clk&&"image"===m.type)s.clk===m&&(n.push({name:d,value:e(m).val(),type:m.type}),n.push({name:d+".x",value:s.clk_x},{name:d+".y",value:s.clk_y}));else if((p=e.fieldValue(m,!0))&&p.constructor===Array)for(r&&r.push(m),f=0,v=p.length;f<v;f++)n.push({name:d,value:p[f]});else if(i.fileapi&&"file"===m.type){r&&r.push(m);var g=m.files;if(g.length)for(f=0;f<g.length;f++)n.push({name:d,value:g[f],type:m.type});else n.push({name:d,value:"",type:m.type})}else null!==p&&void 0!==p&&(r&&r.push(m),n.push({name:d,value:p,type:m.type,required:m.required}));if(!t&&s.clk){var x=e(s.clk),y=x[0];(d=y.name)&&!y.disabled&&"image"===y.type&&(n.push({name:d,value:x.val()}),n.push({name:d+".x",value:s.clk_x},{name:d+".y",value:s.clk_y}))}return n},e.fn.formSerialize=function(t){return e.param(this.formToArray(t))},e.fn.fieldSerialize=function(t){var r=[];return this.each(function(){var a=this.name;if(a){var n=e.fieldValue(this,t);if(n&&n.constructor===Array)for(var i=0,o=n.length;i<o;i++)r.push({name:a,value:n[i]});else null!==n&&void 0!==n&&r.push({name:this.name,value:n})}}),e.param(r)},e.fn.fieldValue=function(t){for(var r=[],a=0,n=this.length;a<n;a++){var i=this[a],o=e.fieldValue(i,t);null===o||void 0===o||o.constructor===Array&&!o.length||(o.constructor===Array?e.merge(r,o):r.push(o))}return r},e.fieldValue=function(t,r){var a=t.name,i=t.type,o=t.tagName.toLowerCase();if(void 0===r&&(r=!0),r&&(!a||t.disabled||"reset"===i||"button"===i||("checkbox"===i||"radio"===i)&&!t.checked||("submit"===i||"image"===i)&&t.form&&t.form.clk!==t||"select"===o&&-1===t.selectedIndex))return null;if("select"===o){var s=t.selectedIndex;if(s<0)return null;for(var u=[],c=t.options,l="select-one"===i,f=l?s+1:c.length,d=l?s:0;d<f;d++){var p=c[d];if(p.selected&&!p.disabled){var m=p.value;if(m||(m=p.attributes&&p.attributes.value&&!p.attributes.value.specified?p.text:p.value),l)return m;u.push(m)}}return u}return e(t).val().replace(n,"\r\n")},e.fn.clearForm=function(t){return this.each(function(){e("input,select,textarea",this).clearFields(t)})},e.fn.clearFields=e.fn.clearInputs=function(t){var r=/^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i;return this.each(function(){var a=this.type,n=this.tagName.toLowerCase();r.test(a)||"textarea"===n?this.value="":"checkbox"===a||"radio"===a?this.checked=!1:"select"===n?this.selectedIndex=-1:"file"===a?/MSIE/.test(navigator.userAgent)?e(this).replaceWith(e(this).clone(!0)):e(this).val(""):t&&(!0===t&&/hidden/.test(a)||"string"==typeof t&&e(this).is(t))&&(this.value="")})},e.fn.resetForm=function(){return this.each(function(){var t=e(this),r=this.tagName.toLowerCase();switch(r){case"input":this.checked=this.defaultChecked;case"textarea":return this.value=this.defaultValue,!0;case"option":case"optgroup":var a=t.parents("select");return a.length&&a[0].multiple?"option"===r?this.selected=this.defaultSelected:t.find("option").resetForm():a.resetForm(),!0;case"select":return t.find("option").each(function(e){if(this.selected=this.defaultSelected,this.defaultSelected&&!t[0].multiple)return t[0].selectedIndex=e,!1}),!0;case"label":var n=e(t.attr("for")),i=t.find("input,select,textarea");return n[0]&&i.unshift(n[0]),i.resetForm(),!0;case"form":return("function"==typeof this.reset||"object"==typeof this.reset&&!this.reset.nodeType)&&this.reset(),!0;default:return t.find("form,input,label,select,textarea").resetForm(),!0}})},e.fn.enable=function(e){return void 0===e&&(e=!0),this.each(function(){this.disabled=!e})},e.fn.selected=function(t){return void 0===t&&(t=!0),this.each(function(){var r=this.type;if("checkbox"===r||"radio"===r)this.checked=t;else if("option"===this.tagName.toLowerCase()){var a=e(this).parent("select");t&&a[0]&&"select-one"===a[0].type&&a.find("option").selected(!1),this.selected=t}})},e.fn.ajaxSubmit.debug=!1});
var W=typeof W!=="undefined"?W:{};var workpadEntries={};var usePf5=false;var bookletLazyLoad=null;var bookletScales=[.25,.33,.5,.67,1,2,3,4,5];var bodyOverflow=null;var $global={wpKey:null,featured:false,login:{},password:null,resizeRatio:false,autoplayId:0,resultMoved:null,edit:false,design:false,narrate:false,print:false,embed:false,mobile:false,publish:false,preview:false,share:false,bookletScale:1,backgroundImages:[],readOnly:false,adCount:0,lastAdPage:null,bookletWheelPanned:false,googleAnalyticsInitialized:false,analyticsPreviousPage:-1,databaseAnalyticsPreviousPage:-1,videoEndCreditPage:99999,pageAudio:null,flipping:false,leadGateOpened:false,render:true};var gridDiv;var rdpDiv;var post_load_modal_queue=[];var openLeadWebsiteAction=function(){openLeadWebsite($(this).data("lightbox_click_url")||workpadEntries[$(this).data("id")].data,$(this).data("lead_click_action"))};var leadTypeActions={LEAD_EMAIL:"button-addemailresult",LEAD_PHONE:"button-addphoneresult",LEAD_SHARE:"public-vertical-card-share",LEAD_CAPTION:"button-addcaptionresult",LEAD_VIDEO:"lightbox_url",LEAD_MAP:"lightbox_url",LEAD_GOOGLE_FORM:"lightbox_url",BUTTON_GOOGLE_SPREADSHEET:"lightbox_url",BUTTON_GOOGLE_PRESENTATION:"lightbox_url",BUTTON_BUY:"lightbox_url",LEAD_IMAGE:"button-addimageresult",EMPTY_LINK_IMAGE:"button-addimageresult",EMPTY_LINK_DOC:"lightbox_url",EMPTY_LINK_CODE:"lightbox_url",LEAD_FIND:openGoogleMapByAddressId,LEAD_BUY:openLeadWebsiteAction,LEAD_WEBSITE:openLeadWebsiteAction,LEAD_RESERVE:openLeadWebsiteAction};function initRdp(account,wpKey){wpKey=wpKey?wpKey:parseQueryString("wpKey");if(!wpKey)console.log("rdp.js: no wpKey");usePf5=$("body").hasClass("pf5");if(IOS&&!IOS_SERVER){window.location.search+="&ios=1&referer="+encodeURI(document.referrer);if(DEV)console.log("added IOS to url");return}if(MOBILE){setInterval(function(){$("body").toggleClass("zoomed",isZoom())},200)}if(inIframe()){$("body").addClass("in-iframe")}$global.login.account_id=account?parseInt(account["account_id"]):0;$global.login.accountType=account?parseInt(account["plus"]):0;var lazyLoadVersion=!("IntersectionObserver"in window)?"8.7.1":"12.0.0";var lazyLoadUrl="/js/lazyload."+lazyLoadVersion+".min.js";$.getScript(lazyLoadUrl,function(){bookletLazyLoad=new LazyLoad({threshold:1e3})});if(!document.getElementById("bookletDiv")){$("<div id='bookletDiv' />").appendTo(document.body);if($global.embed){$("#bookletDiv").addClass("embed")}}if(usePf5&&parseQueryString("page")===""){setUrlPageNumber(1)}rdpDiv=createRdp();gridDiv=createGrid(rdpDiv);$global.bookletDiv=$("#bookletDiv");$global.bookletDiv.data("defaultWidth",$global.bookletDiv.width());$global.bookletDiv.data("defaultHeight",$global.bookletDiv.height());$global.rdpDiv=$("#rdpDiv");$global.gridDiv=$("#gridDiv");initBooklet();loadWorkpad(wpKey,initRdpLoadWorkpadComplete);if($global.embed){$(document).on("click","body.embed .pf a",function(){var href=$(this).attr("href");if(href&&href.indexOf("mailto")!==0){window.open(href,"_blank");return false}})}if(isEmbed()&&!usePf5){$("#bookletDiv").get(0).addEventListener("wheel",bookletWheelPan)}}function initRdpLoadWorkpadComplete(){var pid=parseQueryString("pid");var pidHash=parseQueryString("pid",true);var popupId=pidHash||(pid==="public-vertical-card-install"?pid:"");DEVELOPER_IP&&console.log("pid, pidHash, popupId: ",pid,pidHash,popupId);var initialPage=getPageParam();bookletSetPages();lazyLoadUpdate();if(initialPage>$global.lastPage){initialPage=$global.lastPage}if(initialPage===0&&isGatefoldSingle()){initialPage=1}if(isRightToLeft()){initialPage=usePf5?0:$global.lastPage}if(editMode()||!isPf5()){changePage(initialPage,null,true)}else if(usePf5){gotoPage(initialPage)}$global.currentPage=initialPage;if(popupId){displayInitialModal(popupId)}setBusinessCardDownloadButton();changePageComplete(350);$(document).trigger("rdp-loaded");if(publicMode()){setTimeout(function(){$.ajax({url:"https://"+BASE_DOMAIN+"/workpad/workpad_public/log_workpad_view",data:{workpad_key:W["workpad_key"],workpad_view_log_data:workpadViewLogData},type:"POST",xhrFields:{withCredentials:true}})},750)}document.documentElement.style.setProperty("--page-width",W["width"]+"px")}function initBooklet(){createPageturnButtons();$(document).keyup(function(e){if($global.resultMoved){$global.resultMoved.savePosition();$global.resultMoved=null}else if($global.publish){var elementType=document.activeElement&&document.activeElement.nodeName?document.activeElement.nodeName.toLowerCase():"";if(elementType==="input"||elementType==="textarea"){return true}if(!isPaywallOpen()&&!isLeadgateOpen()){if(e.which===KEYCODES.ARROW_LEFT){changePage(-1)}else if(e.which===KEYCODES.ARROW_RIGHT){changePage(1)}}return false}});$global.currentPage=getPageParam();if(HANDHELD){$global.bookletDiv.rdpMobile()}$(document).on("input","input.page_slider",function(){var page=$(this).val();gotoPage(page)});$global.bookletDiv.on("transitionend",function(){if(isFirefox()){if(document.body.scrollHeight>document.body.clientHeight){$("body").css("overflow-y","visible")}else{$("body").css("overflow-y","hidden")}}})}function rdpReset(){W={};workpadEntries={};$("#clickToAddMessageDiv").appendTo($(rdpDiv)).hide();$global.gridDiv.remove();gridDiv=createGrid(rdpDiv);$global.gridDiv=$(gridDiv);$global.currentPage=0;autoplayStop();$("#textResultsDiv").children().remove();$("body").css("backgroundImage","none").css("backgroundColor","none")}function loadWorkpad(wpKey,callback){rdpReset();$.ajax({url:"/workpad/workpad_public/get",data:{workpad_key:wpKey},success:function(response){$global.wpKey=wpKey;setWorkpadData(response.data);var pageRange="0-"+(isTrifold()?"6":isGatefold()?"8":LAZYLOAD_PAGE_THRESHOLD);if(isPwa()){pageRange="0-"+(isTrifold()?"6":isGatefold()?"8":$global.lastPage)}if($global.render){getWorkpadEntries(W["key"],pageRange,function(){loadWorkpadGetWorkpadEntriesComplete(response,callback)})}if(publicMode()&&+W["email_on_open"]){if(DEV)console.log("requesting email notification");$.get("/workpad/workpad_public/email_notification",{workpad_key:wpKey})}if(W["slack_notification_toggle"]&&!parseQueryString("from-slack")){if(DEV)console.log("requesting slack notification");$.get("/workpad/workpad_public/slack_notification",{workpad_key:wpKey})}}})}function loadWorkpadGetWorkpadEntriesComplete(response,callback){paywallPrompt(W["id"]);leadGatePrompt();$("iframe.resultImg.iframe").on("load",function(){$(this).contents().find("body").css("margin","0")});updateResultDivAsync();analyticsTrackPage($global.currentPage);typeof getWorkpadNarrations==="function"&&getWorkpadNarrations();if(isRightToLeft()){gotoPage($global.lastPage,true)}if(typeof callback==="function"){callback(response)}}function updateResultDivAsync(){$(".resultDiv.async").each(function(){$(this).removeClass("async");getWorkpadEntry($(this).data("id"))})}function createRdp(){var $div=$("<div id='rdpDiv'></div>").addClass("book").appendTo("#bookletDiv");return $div.get(0)}function createGrid(parent){var $div=$("<div id='gridDiv'></div>").addClass("book").appendTo(parent);return $div.get(0)}function setWorkpadData(workpad){if(!workpad){return}W=workpad;W["id"]=W["workpad_id"];W["key"]=W["workpad_key"];if($global.publish&&+W["adult"]===1){if(!confirm("This booklet contains content that may be inappropriate for some users.")){return}}W["styles"]=resultParseFormat(W["format"]);if(editMode()){W["styles"].animation="swing"}else if(MOBILE){if(W["styles"].animation_mobile){W["styles"].animation=W["styles"].animation_mobile}else if(isTrifold()){W["styles"].animation="cardflip-trifold"}else if(!isCardflip()&&getAnimation().indexOf("swing")===-1){W["styles"].animation="cardflip-single";W["styles"].effect=""}}$global.bookletDiv.visible();setBookletPosition();if(HANDHELD&&!usePf5){setTimeout(function(){window.scrollTo(0,1)},0)}var editPage=getPageParam();var lastPage=editMode()?Math.max(W["last_page"],editPage):W["last_page"];createPages(lastPage);gridStylesCss();bookletSetPages();showSticky();setAccountFeatures();gridStylesCssAnimations();scaleBookletToDevice();if(editMode()){setWorkpadDataEditMode()}else{if($global.bookletDiv.hasClass("ui-resizable")){$global.bookletDiv.resizable("destroy")}}setTheme(W["theme"]);if(W["page_audio_url"]){addPageAudio(W["page_audio_url"])}}function getResultDivIdPrefix(){return usePf5?PF5_PREFIX:""}function loadPages(pageList,reload){var pagesToLoad="";pageList.map(function(pageNumber){var $page=$(".pageDiv.page-"+pageNumber);if(!$page.hasClass("loaded")||reload){pagesToLoad+=(pagesToLoad?",":"")+pageNumber}});return pagesToLoad?getWorkpadEntries(W["key"],pagesToLoad):$.when()}function getWorkpadEntries(workpadKey,pages,callback){if(!workpadKey){console.log("getWorkpadEntries no workpadKey: pages=",pages);if(DEVELOPER_IP)console.trace();return}var idPrefix=getResultDivIdPrefix();return $.ajax({url:"/workpad/workpad_public/get_workpad_entries",data:{workpad_key:workpadKey,id_prefix:idPrefix,edit_mode:editMode(),pages:pages,pwa:isPwa(),sticky:pages&&!editMode()},type:"POST",success:function(json){if(json.status!=="ok"){return false}imagesToLoad=json.data.img_count;if(imagesToLoad===0){imgLoadedComplete()}for(var i in json.data.workpad_entries){addWorkpadEntryHtmlToPage(json.data.workpad_entries[i])}if(typeof callback==="function"){callback()}}})}function getWorkpadEntry(id,callback){if(!id){id=$(this).find("id").text()}var idPrefix=getResultDivIdPrefix();if(typeof id==="undefined"){return}return $.ajax({url:"/workpadentry/workpadentry_public/get_html",data:{workpad_key:W["key"],workpad_entry_id:id,id_prefix:idPrefix,edit_mode:editMode()},success:function(json){if(json.status!=="ok"){return false}addWorkpadEntryHtmlToPage(json.data,true,callback)}})}function addWorkpadEntryHtmlToPage(workpadEntry,injectPf5,callback){if(typeof workpadEntry.html==="undefined"||!workpadEntry.html){return false}var id=workpadEntry.workpad_entry_id;if(!id){return false}var resultIdSelector="#"+getResultDivIdPrefix()+"resultDiv_"+id;var page=isRightToLeft()?$global.lastPage-workpadEntry.page:workpadEntry.page;var $pageDiv=createPage(page,true);if(+workpadEntry.sticky&&$(resultIdSelector).length){return false}$(resultIdSelector).remove();$pageDiv.append(workpadEntry.html);if(!+workpadEntry["sticky"]){$pageDiv.addClass("loaded")}var $resultDiv=$(resultIdSelector);if($resultDiv.hasClass("for-nav")){if($resultDiv.hasClass("type-LEAD_EMAIL")){copyLeadEmailToNav($resultDiv)}}if(editMode()){workpadEntryEditMode($resultDiv)}workpadEntries[id]=workpadEntry;$(".textResultDiv_"+workpadEntry.page+" .tocPagePreview").workpadEntryPreview($resultDiv);var resultDivSelector="#resultDiv_"+id;if(usePf5&&injectPf5){if(DEV)console.log("pf5 resultDiv: ",id,$(resultDivSelector,"#pageflip").length);$(resultDivSelector,"#pageflip").html($(workpadEntry.html).html());lazyLoadUpdate()}if($resultDiv.data("contentType")==="FORMBUILDER"){formBuilderRenderResultDiv($(resultDivSelector))}if(!editMode()&&hasAnimate()){animateWorkpadEntryAddEvents()}addRecaptchaForForms();if(typeof callback==="function"){callback()}}function copyLeadEmailToNav($resultDiv){var $nav=$(".state-chrome-messaging");$nav.empty();$resultDiv.clone().appendTo($nav)}function addResultToPage($resultDiv,$pageDiv){$pageDiv.append($resultDiv)}function setDesign(){$global.design=true}function setEmbed(){$global.embed=true}function setMobile(){$global.mobile=true}function setPublish(){$global.publish=true}function setEdit(){$global.edit=true}function setNarrate(){$global.narrate=true}function setPreview(){$global.preview=true}function setShare(){$global.share=true}function setReadOnly(readOnly){$global.readOnly=Boolean(parseInt(readOnly))}function imageMode(){return $("body").hasClass("image")}function editMode(){return $global.edit&&!readOnly()}function designMode(){return $global.design}function narrateMode(){return $global.narrate}function previewMode(){return $global.preview}function readOnly(){return $global.readOnly}function shareMode(){return $global.share}function authorMode(){return editMode()||designMode()||narrateMode()||previewMode()||shareMode()}function publicMode(){return!previewMode()&&($global.publish||$global.embed)}function displayPublish(){window.open(rdpGetUrl({view:"publish"}),"_blank")}function displayPrint(){window.open(rdpGetUrl({view:"print"}),"_blank")}$.fn.extend({workpadEntryPreview:function($result){var $pagePreview=$(this);if(!$pagePreview.length){return}var x=$result.position().left||$result.data("x");var y=$result.position().top||$result.data("y");var $clone=$result.clone(false);$clone.removeAttr("id").removeClass("raised").removeClass("clicked").children(".resultOverlay").remove().children(".resultUnderlay").remove().css("left",x+"px").css("top",y+"px").visible().addClass("resultPreview").find("embed").remove();$pagePreview.append($clone)},workpadPagePreview:function($container,forSearch){var $page=$(this);var pageWidth=$page.width();var pageHeight=$page.height();var containerWidth=$container.width();var containerHeight=$container.height();if(containerHeight===0&&pageHeight===0){return}var pageNum=$page.attr("page");var $pagePreview=$("<div class='tocPagePreview_"+pageNum+" tocPagePreview' />");if(!$pagePreview.length){if(DEV)console.log("no page preview for pageNum: ",pageNum);return}var scale=containerWidth/containerHeight<pageWidth/pageHeight?containerWidth/pageWidth:containerHeight/pageHeight;var left=-Math.floor(pageWidth*(1-scale)/2);var top=-Math.floor(pageHeight*(1-scale)/2);$pagePreview.attr("page",pageNum).width(pageWidth).height(pageHeight).css("left",left+"px").css("top",top+"px").css("margin-left",forSearch?0:Math.floor((containerWidth-pageWidth*scale)/2)+"px").css("margin-top",Math.floor((containerHeight-pageHeight*scale)/2)+"px").css("transform","scale("+scale+")").css("background-image",$page.css("background-image")).css("background-repeat",$page.css("background-repeat")).css("background-position",$page.css("background-position")).css("background-size",$page.css("background-size"));if($page.css("background")){$pagePreview.css("background",$page.css("background"))}if($page.css("background-color")){$pagePreview.css("background-color",$page.css("background-color"))}$container.append($pagePreview);$(".resultDiv",$page).each(function(){$pagePreview.workpadEntryPreview($(this))})}});function bookletSetPages(){if(hasAnimate()){hideAnimatingIn($global.currentPage)}var $bookletDiv=$global.bookletDiv;$bookletDiv.find(".pageDiv,.pf-page-container").each(function(i){var $pageDiv=$(this);var vertical=isVertical();var width=+W["width"];var height=+W["height"];var offset=isWall()?wallTransitionPageSpacing():0;var y=i*((vertical?height:width)+offset);$pageDiv.width(width).height(height);if(!$pageDiv.hasClass("pf-page-container")){if(!isCardflip()){var positionAttr=vertical?"top":"left";$pageDiv.css(positionAttr,y+"px").data("y",y)}}if(isCardflip()){if($pageDiv.find(".card-flip-overlay").length===0){$pageDiv.addClass("card-flip").wrapInner('<div class="card-flip-overlay" />')}}});if(isCardflip()){$(".pageDiv *").each(function(){$(this).css("visibility","inherit")})}bookletSetFirstLastPage();createThumbnails()}function createThumbnails(){var $bookletDiv=$global.bookletDiv;var $tocDiv=$("#textResultsDiv");if($tocDiv.length){$bookletDiv.find(".pageDiv").each(function(i){var $page=$(this);var $textResultDiv=$(".textResultDiv_"+i);if(!$textResultDiv.length){$textResultDiv=$("<div class='textResultDiv_"+i+" textResult item' />").appendTo($tocDiv);var $previewContainer=$("<div class='tocPagePreviewContainer' />").appendTo($textResultDiv);$("<span class='textResultLabel'>"+(i+1)+"</span>").appendTo($textResultDiv);$page.workpadPagePreview($previewContainer);$textResultDiv.click(function(){var pageNum=$(this).index();$(this).addClass("selected").siblings().removeClass("selected");if(!$global.flipping){gotoPage(pageNum,true)}})}});if(editMode()){$tocDiv.sortable({update:tocPageSwap,scroll:true,helper:"original"})}}}function showAdOverlay(page){if(W["tier"]!=="free"||$global.adCount||!publicMode()){return}if($("#workpad-ad-overlay").is(":visible")){return}if(isRightToLeft()&&page!==0||page!==$global.lastPage){return}modalOpen("workpad-ad-overlay",{},function(){$global.adCount++;var adTimer=setInterval(function(){var $adClose=$(".ad-close");var countdown=$adClose.data("countdown")||AD_TIMER;if(countdown-- >1){$adClose.data("countdown",countdown);$adClose.html("Continue in "+countdown+"...")}else{clearInterval(adTimer);var closeHtml="Continue Reading";$adClose.html(closeHtml).addClass("closeable").click(function(){modalCloseAnimate.call($("#workpad-ad-overlay").get(0))})}},1e3)})}function bookletSetFirstLastPage(){$global.firstPage=0;var pageDivs=$(".pageDiv").length;$global.lastPage=isTrifold()||isGatefold()?3:pageDivs?pageDivs-1:0;setCurrentPage();togglePageCorners()}function gotoPage(page,smooth){if(editMode()){slideOutToolsClose()}if(narrateMode()){modalClose()}if(page>$global.lastPage){page=$global.lastPage}var currentPage=+$global.currentPage;if(!usePf5){page=parseInt(page);if(isTrifold()||isGatefold()){(function trifoldFlips(){var currentPage=+$global.currentPage;if(page!==currentPage){var delta=(page-currentPage)/Math.abs(page-currentPage);changePage(delta);setTimeout(trifoldFlips,1e3)}})();return}if(isPageSpread()&&isCardflip()){page=isOdd(page)&&page<$global.lastPage?page+1:page;(function doubleBoardFlips(){var currentPage=+$global.currentPage;console.log("doubleBoardFlips: page,currentPage: ",page,currentPage);if(page!==currentPage){var delta=(page-currentPage)/Math.abs(page-currentPage);changePage(delta);setTimeout(doubleBoardFlips,333)}})();return}if(smooth){return changePage(page-currentPage)}else{var vertical=isVertical();var dist=-page*(vertical?W["height"]:W["width"]);var positionAttr=vertical?"top":"left";$global.gridDiv.css(positionAttr,dist+"px")}}else{if(typeof pageflip!=="undefined"&&typeof pageflip.gotoPage==="function"){pageflip.gotoPageNumber(page+1,true)}}$global.currentPage=page;locationSetPage($global.currentPage);showSticky()}$(document).on("change keyup",".action-page-goto",function(e){var $target=$(e.target);if(e.type==="keyup"&&$target.is("input")){var keyCode=e.keyCode||e.which;if(keyCode!==13){return}}if(!$.isNumeric($(this).val()))return false;var page=$(this).val()-1;if(page>$global.lastPage)page=$global.lastPage;if(page<$global.firstPage)page=0;gotoPage(page,true)});function changePage(numPages,completeFunc,skipChangePageBefore){if(narrateMode()&&$("body").hasClass("action-recording")){return}if(typeof pauseNarratePosition==="function"){pauseNarratePosition()}modalClose("notes");if(editMode()){slideOutToolsClose()}else if(!skipChangePageBefore){if(changePageBefore(function(){changePage(numPages,completeFunc,true)})){return false}}if(narrateMode()&&!$("#welcome-narrate").is(":visible")){if(!$("#narration").length){if(DEV)console.log("Hidding modal on page flip");modalClose()}}bookletWheelPanReset();var currentPage=parseInt($global.currentPage);if(isPageSpread()&&!editMode()){if(numPages===1&&isEven(currentPage)&&currentPage<$global.lastPage-1){numPages++}else if(numPages===-1&&isEven(currentPage)){numPages--}}numPages=currentPage+numPages<$global.firstPage?$global.firstPage-currentPage:numPages;if(!numPages){return false}var vertical=isVertical();var dist=numPages*(vertical?W["height"]:W["width"]);var positionAttr=isVertical()?"top":"left";var newCurrentPage=currentPage+numPages;if(hasAnimate()){hideAnimatingIn(newCurrentPage)}if(hasVideos()){stopVideosOnChangePage(currentPage,newCurrentPage)}if(editMode()){editChangePage(newCurrentPage,dist)}else if(usePf5){pf5ChangePage(newCurrentPage)}else if(newCurrentPage>=$global.firstPage&&newCurrentPage<=$global.lastPage){$global.currentPage=newCurrentPage-$global.firstPage;var styles=W["styles"];var animation=styles&&styles.animation?styles.animation:"swing";var duration=500;var forward=numPages>0;var newPageDivIndex=isPageSpread()&&forward&&(!isLastPage()||isEven($global.lastPage))?Math.max($global.currentPage-1,0):$global.currentPage;var curPageDivIndex=isPageSpread()&&!forward?Math.min($global.currentPage+1,$global.lastPage):currentPage;var $pageDivs=$(".pageDiv");var $curPageDiv=$($pageDivs.get(curPageDivIndex));var $newPageDiv=$($pageDivs.get(newPageDivIndex));if(animation==="instant"){$curPageDiv.data("background_bak",$curPageDiv.css("background")).data("background-image_bak",$curPageDiv.css("background-image")||"none").data("background-repeat_bak",$curPageDiv.css("background-repeat")).data("background-position_bak",$curPageDiv.css("background-position")).data("background-size_bak",$curPageDiv.css("background-size")).css("background","transparent").css("background-image","none").css("z-index",1);$newPageDiv.css("left",$curPageDiv.css("left")).hide().fadeIn(styles.effect?duration:0);$(".resultDiv",$curPageDiv).promise().done(function(){$global.gridDiv.css("left",parseInt($global.gridDiv.css("left"))-dist+"px");$curPageDiv.css("z-index",0).css("background",$curPageDiv.data("background_bak")).css("background-image",$curPageDiv.data("background-image_bak")).css("background-repeat",$curPageDiv.data("background-repeat_bak")).css("background-position",$curPageDiv.data("background-position_bak")).css("background-size",$curPageDiv.data("background-size_bak"));$newPageDiv.css("left",$newPageDiv.data("y"));changePageComplete()})}else if(animation.indexOf("easeInBack")===0||animation==="easeInOutBack"){$global.gridDiv.animate({[positionAttr]:"-="+dist+"px"},duration,"easeInBack")}else if(animation.indexOf("fadeoutin")>=0){var defaultColor="white";var background=animation.substring(animation.indexOf("fadeoutin")+10)||defaultColor;$("#bookletDiv").css("background",background);$global.gridDiv.animate({opacity:0},duration,"swing",function(){$(this).css(positionAttr,parseInt($(this).css("left"))-dist+"px").animate({opacity:1},duration,"swing")})}else if(isWall()){var pageDist=(vertical?+W["height"]:+W["width"])+wallTransitionPageSpacing();dist=numPages*pageDist;var finalDist=-currentPage*pageDist-dist;$global.gridDiv.off("transitionend").on("transitionend",function(){$(".pagecorner").removeClass("disable");DEV&&console.log("wall transitionend")}).css(positionAttr,finalDist+"px");$(".pagecorner").addClass("disable");setTimeout(function(){$(".pagecorner").removeClass("disable");DEV&&console.log("timeout remove disable")},duration*1.2);DEV&&console.log("wall transition: positionAttr, finalDist: ",positionAttr,finalDist)}else if(isCardflip()){doCardFlip($curPageDiv,$newPageDiv,forward,animation)}else{DEV&&console.log("slide transition: vertical="+isVertical());if(animation.indexOf("parallax")!==-1){var curPageDivPos=parseInt($curPageDiv.css(positionAttr));var parallaxShift=curPageDivPos+(vertical?+W["height"]:+W["width"])*(forward?1:-1);DEV&&console.log("currPageDivPos, parallaxShift: ",curPageDivPos,parallaxShift);if(!MOBILE){$newPageDiv.addClass("page-slide-in "+(forward?"forward":"backward"))}$curPageDiv.off("transitionend").on("transitionend",function(e){DEV&&console.log("transitionend",e.target,e.originalEvent.propertyName,e.originalEvent.elapsedTime);$(this).removeClass("page-slide-out forward backward").css({[positionAttr]:curPageDivPos+"px","z-index":0});if(!MOBILE){$(this).css("transform","scale(1)")}$newPageDiv.removeClass("page-slide-in forward backward")}).addClass("page-slide-out "+(forward?"forward":"backward")).css({[positionAttr]:parallaxShift+"px","z-index":-1});if(!MOBILE){$curPageDiv.css("transform","scale(0.8)")}}var newGridDivPos=-currentPage*(vertical?+W["height"]:+W["width"])-dist;$global.gridDiv.css({[positionAttr]:`${newGridDivPos}px`})}if(animation!=="instant"&&!isPf5()&&!isCardflip()){$global.gridDiv.find(".resultDiv").addBack().promise().done(function(){changePageComplete()})}setTimeout(function(){locationSetPage($global.currentPage)},isSafari&&animation==="cardflip-single"?50:0)}if($global.pageAudio){$global.pageAudio.currentTime=0;var promise=$global.pageAudio.play();promise.then(function(){}).catch(function(error){})}return true}let flippingStack=[];let flippingStackClearoutTimer=null;function setFlipping(state){clearTimeout(flippingStackClearoutTimer);if(state){flippingStack.push(true);$global.flipping=true;flippingStackClearoutTimer=setTimeout(function(){flippingStack=[];$global.flipping=false},5e3)}else if(flippingStack.length>0){flippingStack.pop();if(flippingStack.length===0){$global.flipping=false}}$("body").toggleClass("cardflip-flipping",$global.flipping)}function doCardFlip($oldPage,$newPage,forward){var $body=$("body");setFlipping(true);$global.bookletDiv.removeClass(function(index,className){return(className.match(/\bpage-\w+/g)||[]).join(" ")}).addClass("page-"+$global.currentPage+(isLastPage()?" page-last":"")+(!isShowingSinglePage()?" page-double":""));$(".pageDiv").removeClass("new-page old-page flip keep-visible visibility-hidden forward backward");var vertical=isCardflipVertical();var trifold=isTrifold();var cardFlipClass="card-flip "+(vertical?" vertical":"");var direction=forward?"forward":"backward";bodyOverflow=bodyOverflow||$body.css("overflow");if(document.body.scrollHeight<=document.body.clientHeight){$body.css("overflow","hidden")}var pages;if(isPageSpread()){setPageSpreadFlipPages($oldPage,forward)}else if(trifold){pages=setTrifoldFlipPages($oldPage,$newPage,forward);$oldPage=pages.oldPage;$newPage=pages.newPage}else if(isGatefold()){pages=setGatefoldFlipPages($oldPage,$newPage,forward);$oldPage=pages.oldPage;$newPage=pages.newPage}var singleFlip=$global.bookletDiv.hasClass("cardflip-single");if(!singleFlip||direction==="backward"){$newPage.addClass(cardFlipClass+" new-page visibility-hidden "+direction).off("transitionend").on("transitionend",function(){if($(this).hasClass("new-page")){$(".pageDiv,.fold-container").removeClass("flip new-page old-page keep-visible visibility-hidden "+direction);$(this).removeClass(direction);$body.css("overflow",bodyOverflow);$(".pagecorner").removeClass("disable");if((trifold||isGatefold())&&$global.currentPage===3&&!isTrifoldNoFoldBack()){$(".fold-container.pages-back").addClass("finish")}changePageComplete()}return false})}if(!singleFlip||direction==="forward"){$oldPage.removeClass("finish").addClass(cardFlipClass+" old-page "+direction).off("transitionend").on("transitionend",function(){if($(this).hasClass("old-page")){$(this).removeClass("flip old-page "+direction);if(trifold||isGatefold()){scaleBooklet(1)}}if(!singleFlip&&!$newPage.hasClass("flip")){$newPage.removeClass("visibility-hidden");$newPage.addClass("flip")}else if(singleFlip){$body.css("overflow",bodyOverflow);changePageComplete()}return false})}if(singleFlip&&direction==="backward"){$oldPage.addClass("old-page");setTimeout(function(){$newPage.removeClass("visibility-hidden").addClass("flip")},50)}else{$oldPage.addClass("flip")}}function setPageSpreadFlipPages($oldPage,forward){if($oldPage.attr("page")!=="0"){var $pageDivs=$(".pageDiv");var forwardKeepVisible=isLastPage()&&isOdd($global.lastPage)?2:3;if(forward&&$global.currentPage>forwardKeepVisible){$($pageDivs.get($global.currentPage-forwardKeepVisible)).addClass("keep-visible")}else if(!forward&&$global.currentPage<$global.lastPage-1){$($pageDivs.get($global.currentPage+2)).addClass("keep-visible")}}}function setTrifoldFlipPages($oldPage,$newPage,forward){$(".pagecorner").addClass("disable");$(".fold-container .pageDiv").sort(function(a,b){return+a.getAttribute("page")-+b.getAttribute("page")}).appendTo($global.gridDiv);if($global.currentPage===2){if(forward){$newPage=$(".pageDiv.page-3");$oldPage=$(".pageDiv.page-4")}else{$oldPage=$(".fold-container.pages-back");$("#pageDiv_4").appendTo($oldPage);$("#pageDiv_5").appendTo($oldPage);$("#pageDiv_0").appendTo($oldPage);$newPage=$(".fold-container.pages-front");$("#pageDiv_1").appendTo($newPage);$("#pageDiv_2").appendTo($newPage);$("#pageDiv_3").appendTo($newPage)}}else if($global.currentPage===1&&!forward){$newPage=$(".pageDiv.page-4");$oldPage=$(".pageDiv.page-3")}else if($global.currentPage===3){$oldPage=$(".fold-container.pages-front");$("#pageDiv_1").appendTo($oldPage);$("#pageDiv_2").appendTo($oldPage);$("#pageDiv_3").appendTo($oldPage);$newPage=$(".fold-container.pages-back");$("#pageDiv_4").appendTo($newPage);$("#pageDiv_5").appendTo($newPage);$("#pageDiv_0").appendTo($newPage)}$oldPage[0].offsetWidth;$newPage[0].offsetWidth;return{oldPage:$oldPage,newPage:$newPage}}function setGatefoldFlipPages($oldPage,$newPage,forward){$(".pagecorner").addClass("disable");$(".fold-container .pageDiv").sort(function(a,b){return+a.getAttribute("page")-+b.getAttribute("page")}).appendTo($global.gridDiv);if($global.currentPage===0){if(!forward){$oldPage=$("#pageDiv_1");$newPage=$("#pageDiv_0")}}if($global.currentPage===1){if(!forward){var $container=$(".fold-container.pages-front");$("#pageDiv_4").appendTo($container);$("#pageDiv_5").appendTo($container);$oldPage=$(".pageDiv.page-3, .pageDiv.page-6");$newPage=$(".pageDiv.page-1, .pageDiv.page-2")}}else if($global.currentPage===2){if(forward){$oldPage=$(".pageDiv.page-1, .pageDiv.page-2");$newPage=$(".pageDiv.page-3, .pageDiv.page-6")}else{$oldPage=$(".fold-container.pages-back");$("#pageDiv_2").appendTo($oldPage);$("#pageDiv_7").appendTo($oldPage);$("#pageDiv_0").appendTo($oldPage);$("#pageDiv_1").appendTo($oldPage);$newPage=$(".fold-container.pages-front");$("#pageDiv_3").appendTo($newPage);$("#pageDiv_4").appendTo($newPage);$("#pageDiv_5").appendTo($newPage);$("#pageDiv_6").appendTo($newPage)}}else if($global.currentPage===3){$oldPage=$(".fold-container.pages-front");$("#pageDiv_3").appendTo($oldPage);$("#pageDiv_4").appendTo($oldPage);$("#pageDiv_5").appendTo($oldPage);$("#pageDiv_6").appendTo($oldPage);$newPage=$(".fold-container.pages-back");$("#pageDiv_2").appendTo($newPage);$("#pageDiv_7").appendTo($newPage);$("#pageDiv_0").appendTo($newPage);$("#pageDiv_1").appendTo($newPage)}$oldPage[0].offsetWidth;$newPage[0].offsetWidth;return{oldPage:$oldPage,newPage:$newPage}}function changePageBefore(changePageFunction){if(hasAnimate()){if($(".resultDiv.page-"+$global.currentPage+".animate__infinite").length){return false}$(".resultDiv.animated-out").removeClass("animated-out");animateWorkpadEntries($global.currentPage,"close").then(changePageFunction);return true}if(narrateMode()){narrationChangePageSaveCheck(changePageFunction)}return false}var changePageCompleteTimeout;function changePageComplete(delay=300,callback){clearTimeout(changePageCompleteTimeout);changePageCompleteTimeout=setTimeout(function(){debouncedChangePageComplete(callback)},delay)}function debouncedChangePageComplete(callback){showSticky();if(parseInt(W["link_flash"])){linkFlash($global.currentPage);if(isPageSpread()&&$global.currentPage>0){linkFlash($global.currentPage-1)}}if(hasAnimate()){animateWorkpadEntries($global.currentPage,"open")}setFlipping(false);if(hasVideos()){manageStartPageVideos($global.currentPage)}else{}$("a.l").each(function(){if($(this).attr("href").indexOf("#")!==0&&$(this).attr("target")!=="_blank"){$(this).attr("target","_blank")}});typeof togglePageNarration==="function"&&togglePageNarration();if(narrateMode()){narrationModalLoadTeleprompt();narrationModalLoadAudio();narrationModalLoadVideo()}$(document).trigger("change-page-complete");if(typeof callback==="function"){callback()}}function showSticky(){if(usePf5){return}$("div.resultDiv.sticky","#bookletDiv").each(function(){var $resultDiv=$(this);var $pageDiv=pageContainer($global.currentPage);if(!editMode()||$pageDiv.find(".resultDiv").length){addResultToPage($resultDiv,$pageDiv)}if($resultDiv.data("clickurl")&&!editMode())addResultClick($resultDiv)})}function pageContainer(page){return usePf5?$("#page"+(+page+1)):pageDiv(page)}function pageDiv(page){return $("#pageDiv_"+page)}function addResultClick($resultDiv){var target="";if($resultDiv.data("clickurl").toLowerCase().indexOf("http")===0){target="target='"+($resultDiv.data("target")?$resultDiv.data("target"):"_blank")+"'"}$resultDiv.wrap("<a href='"+$resultDiv.data("clickurl")+"' style='color: inherit; text-decoration: none;' "+target+"/>")}function autoplayStart(delay,repeat){if(!editMode()&&!$global.imageMode&&!shareMode()){var intervalDelay=parseInt(delay)*1e3;var autoplayElapsedTime=0;$global.autoplayId=setInterval(function(){var animated=$(":animated").length;if(animated)return;if($global.currentPage<$global.lastPage){changePage(1)}else{if(parseInt(repeat)){gotoPage(0)}else{autoplayStop()}}autoplayElapsedTime+=intervalDelay},intervalDelay)}}function autoplayStop(){if($global.autoplayId)clearInterval($global.autoplayId)}function getPageParam(){return(+parseQueryString("page")||1)-1}function setUrlPageNumber(pageNumber,url){url=url?url:window.location.href;url=url.substr(0,url.indexOf("#"))||url;window.history.replaceState({page:0},"page",url+"#page="+pageNumber)}function locationSetPage(page){$global.currentPage=page<$global.lastPage?page>0?page:0:$global.lastPage;var currentPage=getCurrentPage(true);lazyLoadUpdate();setCurrentPage(getCurrentPage(false));paywallPrompt(W["id"]);leadGatePrompt();if($("body").hasClass("for-video")&&$global.currentPage>=$global.videoEndCreditPage){videoEndCredit()}showAdOverlay(currentPage);if(!isEmbed()){setUrlPageNumber(+currentPage+1)}if(usePf5&&typeof pf5SetActiveContent==="function"){pf5SetActiveContent()}$("#page-range-slider").val(currentPage+1);if(editMode()){slideOutToolsClose();bookletDisplayClickToAddWatermark($global.currentPage)}if(narrateMode()){modalClose()}$("input.page_slider").val(currentPage);togglePageCorners();analyticsTrackPage(currentPage);loadNextPages(currentPage)}function loadNextPages(currentPage){var pages=[currentPage];if(currentPage<$global.lastPage){pages.push(currentPage+1)}if(currentPage>0){pages.push(currentPage-1)}var pageRequests=$.when();pages.forEach(function(nextPage){var $nextPageDiv=pageContainer(isRightToLeft()?$global.lastPage-nextPage:nextPage);if($nextPageDiv.hasClass("loaded")){return}pageRequests=pageRequests.then(function(){return getWorkpadEntries(W["key"],nextPage,function(){if(editMode()){bookletDisplayClickToAddWatermark($global.currentPage)}else{showSticky()}lazyLoadUpdate()})})})}function getCurrentPage(useRTL){var rtl=useRTL&&isRightToLeft();return rtl?$global.lastPage-$global.currentPage:$global.currentPage}function setCurrentPage(page){var pageValue=page||$global.currentPage;$(".pageDiv").removeClass("current facing");$("#pageDiv_"+pageValue).addClass("current");if(pageValue>0&&isEven(pageValue)&&isPageSpread()){$("#pageDiv_"+(pageValue-1)).addClass("facing")}}function togglePageCorners(){var pageDisplayNum=1+getCurrentPage(true);$(".currentPageNumber").text(pageDisplayNum).val(pageDisplayNum);$(".totalPageNumber").text(editMode()?$(".pageDiv").length:isTrifold()||isGatefold()?4:Number(W["last_page"])+1);$(".pagecorner.prev").toggleVisibility(!isFirstPage());$(".pagecorner.next").toggleVisibility(editMode()||!isLastPage())}function firstPage(smooth){gotoPage(isGatefoldSingle()?1:isRightToLeft()&&!usePf5?$global.lastPage:0,smooth)}function lastPage(smooth){gotoPage($global.lastPage-$global.firstPage,smooth)}function resultParseFormat(format){var styles={};if(format){var fields=format.split("&");for(var i in fields){var field=fields[i].split("=");var name=field[0];var value=unescape(field[1]);if(name&&value){styles[name]=value}}}if(parseQueryString("animation")){styles["animation"]=parseQueryString("animation")}return styles}function gridStylesCss(styles,ignoreBodyImage){var $body=$("body");var $bookletDiv=$global.bookletDiv;styles=styles?styles:W["styles"];if(styles){if(styles.bodyColor){if(!$global.embed){$body.css("backgroundColor",styles.bodyColor||"")}else{$body.css("backgroundColor","transparent").css("background","transparent")}}if(styles.bodyImage&&!ignoreBodyImage){$body.css("backgroundImage",styles.bodyImage!=="none"&&!$global.embed?"url('"+styles.bodyImage+"')":"none");$body.css("background-position",styles.position!=="none"&&!$global.embed?styles.position:"0% 0%");$body.css("background-repeat",styles.repeat!=="none"&&!$global.embed?styles.repeat:"no-repeat");$body.css("background-attachment",styles.attachment!=="none"&&!$global.embed?styles.attachment:"none");$body.css("background-size",styles.size!=="none"&&!$global.embed?styles.size:"auto");if(styles.bodyImage!=="none"&&W["animate_background"]&&!(isSafari()||isFirefox())&&styles.size==="cover"&&styles.bodyImage.indexOf(".svg")<0){var img=new Image;img.src=styles.bodyImage;img.onload=function(){var imgRatio=this.height?this.width/this.height:1;var windowRatio=window.innerHeight?window.innerWidth/window.innerHeight:1;var scaleUp=imgRatio>windowRatio?imgRatio/windowRatio:1;var start=W["animate_background"]==="zoom-in"?100*scaleUp+"%":110*scaleUp+"%";var end=W["animate_background"]==="zoom-in"?110*scaleUp+"%":100*scaleUp+"%";$body.addClass("animate-background").css("background-size",start).css("background-position","center center");setTimeout(function(){$body.css("background-size",end)},200)}}}var backgroundImage=!styles.backgroundImage||styles.backgroundImage==="undefined"||styles.backgroundImage==="none"?"none":"url('"+styles.backgroundImage+"?"+(new Date).getTime()+"')";$(".pf-page-container , .pageDiv").css("background",styles.backgroundColor).css("background-color",styles.backgroundColor).css("background-image",backgroundImage);$("#bookletPagePrev").removeClass().addClass("pagecorner rdp-pagecorner prev ");$("#bookletPageNext").removeClass().addClass("pagecorner rdp-pagecorner next ");$bookletDiv.removeClass("rounded square").addClass("square");if(!editMode()){bookletDivAddClassAnimation(styles.animation)}$bookletDiv.attr("class",function(i,c){return c.replace(/border_\S+/g,"")});if(styles.booklet_border_style){$bookletDiv.addClass(styles.booklet_border_style);setPf5BorderShadow(hasBorderShadow())}}if(!usePf5){$bookletDiv.width(W["width"]).height(W["height"]);$bookletDiv.find(".resultDiv.type-BACKGROUND").each(function(){resultImageToBackground($(this))})}}function gridStylesCssAnimations(styles){styles=styles||W["styles"];if(styles&&styles.animation&&!editMode()&&styles.pagecontrol==="autoflip"){autoplayStart(styles.animationtiming,styles.animationrepeat||0)}}function bookletDivAddClassAnimation(animation,oldAnimation){var cardFlip="cardflip-";var elements=$("body, #bookletDiv");if(oldAnimation){var classesToRemove=oldAnimation;if(oldAnimation.indexOf(cardFlip)>=0){classesToRemove+=" cardflip"}else if(oldAnimation.indexOf("wall_")>=0){classesToRemove+=" wall"}elements.removeClass(classesToRemove)}if(animation){var classesToAdd=animation;if(animation.indexOf(cardFlip)>=0){classesToAdd+=" cardflip";if(animation==="cardflip-gatefold-single"){classesToAdd+=" cardflip-gatefold"}else if(animation.indexOf("cardflip-trifold-nofold")>=0){classesToAdd+=" cardflip-trifold"}}else if(animation.indexOf("wall_")>=0){classesToAdd+=" wall"}if(isVertical()){classesToAdd+=" vertical";classesToAdd+=" "+animation.replace(/-vertical$/,"")}elements.addClass(classesToAdd)}if(isTrifold()||isGatefold()){if($global.currentPage===0&&!$global.bookletDiv.hasClass("page-0")){$global.bookletDiv.addClass("page-0")}if($(".fold-container").length===0){$("<div class='fold-container pages-front' ><div class='card-flip-overlay' /></div>").appendTo($global.gridDiv);$("<div class='fold-container pages-back' ><div class='card-flip-overlay' /></div>").appendTo($global.gridDiv)}}else if(isCardflip()){if(!IOS){$global.gridDiv.width(isPageSpread()?0:W["width"])}}if(animation==="cardflip-single-vertical"){elements.toggleClass("cardflip-single",true)}}function getEmbedUrl(gadget,nocache,source){var scriptName=gadget?"ig":"embed";source=typeof source==="string"?source:scriptName;return rdpGetUrl({view:scriptName,source:source,nocache:nocache,noprotocol:false})}function getEmbedCode(custom_width,nocache,source){var borderPadding=hasBorderShadow()?32:0;var width=borderPadding+parseInt(W["width"]);var height=borderPadding+parseInt(W["height"]);var style="border: 0; overflow: hidden;";if(custom_width==="container"){height="100%"}else{if(custom_width){var r=custom_width/width;width=Math.ceil(r*width);height=Math.ceil(r*height);if(isPageSpread()){height=parseInt(height/2)}}else{if(isPageSpread()){height=parseInt(height/2)}}style+=" width: 1px; min-width: 100%; max-width:"+width+"px;"}var url=getEmbedUrl(false,nocache,source);return"<iframe src='"+url+"' allowfullscreen width='100%' height='"+height+"' style='"+style+"' scrolling='no'></iframe>"}function setEmbedCode(code){$("textarea.action-embedcode-display").val(code)}function setEmbedUrl(url){$("textarea.action-embedurl-display").val(url)}$(document).on("change",".bookletembed select[name=use_custom]",function(){var option=$(this).val();var $widthInput=$(".bookletembed input[name=custom_width]");$widthInput.css("opacity",".2").attr("readonly","readonly");if(option==="custom"){$widthInput.css("opacity","1").removeAttr("readonly").trigger("change")}else if(option==="container"){setEmbedCode(getEmbedCode("container"))}else{setEmbedCode(getEmbedCode())}});$(document).on("keyup change",".bookletembed input[name=custom_width]",function(){setEmbedCode(getEmbedCode($(this).val()))});function getBookletImageUrl(gif){var url_base=get_image_url_base();return url_base+(gif?"/gifs/"+W["key"]+".gif":"/thumbs/w500/"+W["key"]+".jpg")}function bookletEmail(isPublic=true){loadRecaptchaV2(function(){jsLoad("/js/bookletemail.js",typeof bookletEmailCallback,function(){var modalId=isPublic?"public-vertical-card-email":"share-task-email-html";modalOpen(modalId,{public:+isPublic},bookletEmailCallback)})})}function whenRecaptchaReady(callback,maxAttempts=20,interval=100){if(typeof callback!=="function"){return}let attempts=0;const intervalId=setInterval(()=>{attempts++;if(window.grecaptcha&&window.grecaptcha.render){if(DEV)console.log("reCAPTCHA is ready. Calling callback. attempts: "+attempts);clearInterval(intervalId);callback()}else if(attempts>=maxAttempts){if(DEV)console.log("reCAPTCHA did not become ready in time. Max attempts reached.");clearInterval(intervalId)}else{if(DEV)console.log("reCAPTCHA not ready yet. Attempt "+attempts)}},interval)}function loadRecaptchaV2(callback){if(DEV)console.log("loading recaptcha v2. callback: "+typeof callback);jsLoad("https://www.google.com/recaptcha/api.js",typeof grecaptcha,function(){if(DEV)console.log("recaptcha api.js loaded. callback: "+typeof callback);whenRecaptchaReady(function(){if(DEV)console.log("recaptcha ready. callback: "+typeof callback);jsLoad("/js/recaptcha_v2_util.js",typeof initRecaptchaV2,callback)})})}$(document).ready(function(){$(document).on("click","#gifemail",function(){var checked=$(this).is(":checked");showLoading();$(this).closest(".modal").find(".action-booklet-email-image").one("load",function(){hideLoading()}).attr("src",getBookletImageUrl(checked))})});function rdpGetUrl(options){options=typeof options!=="object"?{}:options;var view=typeof options.view==="string"?options.view:"design";var file=view+".php";var domain=document.domain;var protocol="https:";var query_string="wpKey="+W["key"];if(typeof options.source==="string")query_string+="&source="+options.source;if(typeof options.nocache==="boolean")query_string+=options.nocache?"&t="+(new Date).getTime():"";if(typeof options.noprotocol==="boolean")protocol=options.noprotocol?"":protocol;if(typeof options.domain==="string")domain=options.domain;return protocol+"//"+domain+"/"+file+"?"+query_string}function getThumbUrl(){return location.protocol+"//"+document.domain+"/thumbs/"+W["key"]+".jpg"}$(document).on("click",".contactform_element",function(){if(editMode())return false});$(document).on("click",".contactWidgetEmailSend",function(){if(editMode())return false;var $this=$(this);var $result=$this.closest(".resultDiv");var $form=$this.closest("form").length?$this.closest("form"):$result;var from=$("input[name=from]",$form).val();var emailHtml="";$(".msg",$form).remove();if(!from){from=$("input[name=Email]",$form).val()||$("input[name=email]",$form).val()||$("input[name=From]",$form).val()||$("input[name=from]",$form).val()}if(!validateEmail.test(from)){$this.after('<div class="msg"  style="color: #fff; margin-top: 20px; padding: 5px; background: #f00; border-radius: 3px;">Please provide your email.</div>');return false}$(".contactform_element",$form).each(function(){var val=$(this).val().trim();if(val.length>1)emailHtml+=$(this).attr("name")+": "+val+"<br>\n"});if(emailHtml.length<=1){$this.after('<div class="msg"  style="color: #fff; margin-top: 20px; padding: 5px; background: #f00; border-radius: 3px;">Please add a message.</div>');return false}var data={from:from,message:emailHtml,workpad_entry_id:$result.data("id"),page:$global.currentPage};var sendButtonHtml=$this.html();var sendNode=$this;$this.html("<img src='/img/rolling-load.gif'>");sendWorkpadEntryFormEmail(null,data,function(){sendNode.html(sendButtonHtml);$this.after('<div class="msg" style="color: #222; margin-top: 20px; display: none; padding: 5px; background: #fff; border-radius: 3px; ">Email Sent!</div>');$this.closest("div").find("div.msg").fadeIn(1e3,function(){$(this).delay(3e3).fadeOut(1e3)});$form.find("input, textarea").val("")});return false});function sendWorkpadEntryFormEmail(button,data,callback){initRecaptchaForForms(function(){if(button){var $form=$(button).closest("form");var $from=$form.find("input[name=from]").length?$form.find("input[name=from]"):$form.find("input[name=email]");var $message=$form.find("textarea[name=message]");var from=$from.val();var message=$message.val();var workpad_entry_id=$form.find("input[name=workpad_entry_id]").val();if(!validateEmail.test(from)){return $from.addClass("validate_error")}else{$from.removeClass("validate_error")}if(!message){return $message.addClass("validate_error")}else{$message.removeClass("validate_error")}data={from:from,message:message,workpad_entry_id:workpad_entry_id,page:$global.currentPage}}data["recaptcha"]=$("input[name=workpad-form-recaptcha]").val();$.ajax({url:"/email/workpadentry_email/form_send",type:"POST",data:data,success:function(data){modalToast(data.message,modalClose);if(typeof callback==="function"){callback()}},error:function(data){modalToast(data.message)},complete:function(){initRecaptchaForForms()}})})}function addRecaptchaForForms(){var $body=$("body");if($body.find("#workpad-form-recaptcha").length){return}if($(".contactWidgetEmailSend,.type-LEAD_EMAIL").length){var $recaptchaContainer=$('<div id="workpad-form-recaptcha" />').appendTo($body);$body.append('<input type="hidden" name="workpad-form-recaptcha" />');loadRecaptchaV2(function(){if(DEV)console.log("recaptcha loaded");if(typeof renderRecaptchaToContainer==="function"){if(DEV)console.log("rendering recaptcha container");renderRecaptchaToContainer($recaptchaContainer.get(0))}})}}function initRecaptchaForForms(callback){if(DEV)console.log("initRecaptchaForForms");loadRecaptchaV2(function(){if(DEV)console.log("initRecaptchaForForms initRecaptchaV2");initRecaptchaV2("workpad_form","workpad-form-recaptcha",callback)})}function setAccountFeatures(){$(".requireOwner, .requirePro").each(function(){var $this=$(this);if($this.hasClass("requireOwner"))if(!readOnly())$this.addClass("hasOwner");else $this.removeClass("hasOwner");if($this.hasClass("requirePro")){if(isUpgraded()){$this.addClass("hasPro").addClass(readOnly()?"":"hasOwner")}else{$this.removeClass("hasPro").removeClass(readOnly()?"":"hasOwner")}}if(this.onclick&&!$this.data("onclick")){$this.data("onclick",this.onclick);this.onclick=function(event){if($this.hasClass("requireOwner")&&$this.hasClass("hasOwner")||$this.hasClass("requirePro")&&$this.hasClass("hasPro")&&$this.hasClass("hasOwner")){$this.data("onclick").call(this,event||window.event)}else if($this.hasClass("requirePro")&&!$this.hasClass("hasPro")&&loggedIn()){return modalToastConfirm("Upgrade to access this feature.",function(){modalClose();modalOpen("upgrade")})}}}})}function loggedIn(){return $global.login&&$global.login.account_id}$(document).on("click",'#bookletDiv a, .resultDiv[data-content-type^="EMPTY_LINK"], .click-bound',function(){var href=$(this).attr("href")||$(this).data("url")||$(this).data("lightbox_click_url");if(!href||typeof href==="undefined"){return}var matches=href.match(/^https?:\/\/([^\/?#]+)(?:[\/?#]|$)/i);var domain=matches&&matches[1];if(domain&&domain!==BASE_DOMAIN){googleAnalyticsTrackLink(href)}});function analyticsTrackPage(page){if(!W.id){return}var visiblePages=[page];if(!isShowingSinglePage()){visiblePages.push(isAlwaysOpened()?page+1:page-1)}if($global.analyticsPreviousPage===page){return}for(var i in visiblePages){var logPage=visiblePages[i];var gaPage=logPage+1;googleAnalyticsPageview(gaPage?googleAnalyticsTrackPrefix()+"page-"+gaPage:"");matomoTrackPage(window.location.pathname+"#page="+gaPage);databaseTrackPage(logPage,visiblePages)}$global.analyticsPreviousPage=page}function databaseTrackPage(page){if(!W[TRACK_PAGE_ANALYTICS]||authorMode()||imageMode()){return}if(!IS_NARRATE&&+W["log_page_view"]){setTimeout(logPageView,1e3,$global.currentPage,page)}}function logPageView(currentPage,logPage){if(currentPage!==$global.currentPage){return}$.ajax({url:"/workpad/workpad_event_log/page_view",data:{workpad_key:W.key,page:logPage},type:"POST"})}function googleAnalyticsIsUA(){var gaId=W["default_ga_id"];return gaId&&gaId.indexOf("U")===0&&typeof ga==="function"}function googleAnalyticsIsGA4(){var gaId=W["default_ga_id"];return gaId&&gaId.indexOf("G")===0&&typeof gtag==="function"}function googleAnalyticsTrackLink(url){if(googleAnalyticsCreate()){if(DEV)console.log("workpadTracker.send","event",googleAnalyticsTrackPrefix(),"link-click",url);googleAnalyticsEvent(googleAnalyticsTrackPrefix(),"link-click",url)}if(!authorMode()){logEvent("LINK_CLICK",url)}}function googleAnalyticsCreate(){if(loggedIn()){return false}if(!W||!W["default_ga_id"]){return false}if($global.googleAnalyticsInitialized){return true}if(googleAnalyticsIsGA4()){gtag("js",new Date);gtag("config",W["default_ga_id"]);$global.googleAnalyticsInitialized=true}else if(googleAnalyticsIsUA()){ga("create",W["default_ga_id"],"auto","workpadTracker");$global.googleAnalyticsInitialized=true}return $global.googleAnalyticsInitialized}function googleAnalyticsPageview(pageTitle){if(!googleAnalyticsCreate()){return}if(googleAnalyticsIsGA4()){gtag("event","page_view",{page_title:pageTitle})}else if(googleAnalyticsIsUA()){ga("workpadTracker.send","pageview",pageTitle)}}function matomoTrackPage(pageTitle){if(typeof _paq!=="undefined"){_paq.push(["setCustomUrl","/"+pageTitle]);_paq.push(["setDocumentTitle",pageTitle]);_paq.push(["trackPageView"])}}function googleAnalyticsEvent(eventCategory,eventAction,eventLabel,eventValue){if(googleAnalyticsIsGA4()){gtag("event",eventAction,{event_category:eventCategory,event_label:eventLabel,value:eventValue})}else if(googleAnalyticsIsUA()){ga("workpadTracker.send","event",eventCategory,eventAction,eventLabel,eventValue)}}function googleAnalyticsTrackPrefix(){return"/"+(W["vanity_path"]||W["key"])+"/"}function displayWordpressCode(){modalOpen("share-task-wordpress",true,function(){var embed_url=getEmbedUrl(false,false,"wordpress");var booklet_width=6+parseInt(parseInt(W["width"]));var booklet_height=6+parseInt(parseInt(W["height"]));if(isPageSpread()){booklet_height=parseInt(booklet_height/2)}$("#wordpresscode_shortcode").val('[simplebooklet src="'+embed_url+'" width="'+booklet_width+'" height="'+booklet_height+'"]')})}function getSocialUrl(publishUrl,source){var url=typeof publishUrl!=="undefined"?publishUrl:W["publish_url"];var socialUrl;if(typeof url==="undefined"||url.length===0){socialUrl=rdpGetUrl({view:"publish",source:source})}else{var join=url.indexOf(".php?")<=0?"?":"&";socialUrl=url+join+"source="+source}return encodeURI(socialUrl)}function launchTwitter(publishUrl){var url=getSocialUrl(publishUrl,"twitter");url=url.replace(/^https/,"http");window.open("http://twitter.com/share?url="+url+"&text="+escape(W["name"]),"twitter","height=450,width=550")}function launchPinterest(publishUrl){var url=getSocialUrl(publishUrl,"pinterest");var pinterest_url="http://pinterest.com/pin/create/button/?"+"url="+url+"&media="+escape(getThumbUrl())+"&description="+escape(W["name"]+"\n"+W["comment"]+"\n"+"- made with simplebooklet.com");window.open(pinterest_url)}function launchLinkedin(publishUrl){var url=getSocialUrl(publishUrl,"linkedin");var linkedin_url="https://www.linkedin.com/shareArticle?"+"mini=true"+"&url="+encodeURIComponent(url)+"&title="+escape(W["name"])+"&source="+escape(location.protocol+"//"+document.domain);window.open(linkedin_url,"linkedin","width=580, height=520, scrollbars=1, resizable=1")}function launchGooglePlus(publishUrl){var url=getSocialUrl(publishUrl,"google_plus");window.open("https://plus.google.com/share?url="+url)}function setSocialTools(publishUrl){if(typeof publishUrl==="undefined"){if(typeof W["publish_url"]!=="undefined"){publishUrl=W["publish_url"]}}$(document).off("click",".publish_pinterest").on("click",".publish_pinterest",function(){launchPinterest(publishUrl)});$(document).off("click",".publish_linkedin").on("click",".publish_linkedin",function(){launchLinkedin(publishUrl)})}function createPages(lastPage){for(var create_page=0;create_page<=lastPage;create_page++){createPage(create_page)}}function createPage(page,setPages){var $pageDiv=$("#pageDiv_"+page);if($pageDiv.length){return $pageDiv}if(!$pageDiv.length){$pageDiv=$("<div />").attr("id","pageDiv_"+page).attr("page",page).addClass("pageDiv").addClass("page-"+page).addClass("page-"+(isOdd(page)?"odd":"even")).addClass("page").width(W["width"]).height(W["height"]);$global.gridDiv.append($pageDiv)}var styles=W["styles"];if(styles){var backgroundImage=!styles.backgroundImage||styles.backgroundImage==="undefined"||styles.backgroundImage==="none"?"none":"url('"+styles.backgroundImage+"')";$pageDiv.css("background",styles.backgroundColor).css("background-color",styles.backgroundColor).css("background-image",backgroundImage)}if(setPages){bookletSetPages()}return $pageDiv}function displayInitialModal(pid){DEVELOPER_IP&&console.log("displayInitialModal loaded: ",pid);if(!pid){return}var pageName=window.location.pathname.substring(window.location.pathname.lastIndexOf("/")+1);if(pageName.indexOf("embed")>=0){return}if(pid==="public-vertical-card-email"){post_load_modal_queue.push(function(){bookletEmail()})}else if(pid==="mailchimp"){post_load_modal_queue.push(function(){modalOpen("mailchimp")})}else if(pid==="booklet-edit-name"){post_load_modal_queue.push(function(){modalOpen("booklet-edit-name",null,null,workpadNameValidate)})}else if(pid==="meeting-comments"&&typeof displayMeetingComments==="function"){post_load_modal_queue.push(function(){console.log("I AM GROOT");displayMeetingComments()})}else{post_load_modal_queue.push(function(){modalOpen(pid)})}processPostLoadModalQueue()}function setTheme(theme_name){if(theme_name){$("link.theme").remove();$("head").append($('<link rel="stylesheet" type="text/css" class="theme" />').attr("href","/css/themes/"+theme_name+".css"));$("body").attr("class",function(i,c){return c.replace(/\btheme_\S+/g,"")}).addClass("theme_"+theme_name)}}function scaleBooklet(includeHeight,setScale){var $bookletDiv=$global.bookletDiv;if(!$bookletDiv)return;if(editMode()){$bookletDiv.css("transform","");$bookletDiv.css("margin-top","");$("#edit-page-tools").css("margin-left","");return}bookletWheelPanReset();var bookletMargin=parseInt($(".bookletContainer").css("margin"))||BOOKLET_MARGIN_TOP_BOTTOM;var mobileMargin=$global.mobile?bookletMargin:0;var windowWidth=$global.mobile?document.documentElement.clientWidth-mobileMargin:Math.min($bookletDiv.parent().width(),window.innerWidth);var windowHeight=$global.mobile?document.documentElement.clientHeight-mobileMargin:Math.min($bookletDiv.parent().height(),window.innerHeight);var bookletWidth=$bookletDiv.outerWidth()*getBookletFoldWidth();var bookletHeight=$bookletDiv.outerHeight();windowWidth-=typeof narrationModalWidth==="function"?narrationModalWidth()+10:0;if(isTrifold()&&isVertical()){windowWidth=+windowHeight}var wixWidth=parseQueryString("width");var wixHeight=parseQueryString("height");if(windowWidth===0){windowWidth=bookletWidth}if(windowHeight===0){windowHeight=bookletHeight}if(IOS&&isWix()){if(wixWidth){$("body").width(wixWidth);windowWidth=wixWidth}if(wixHeight){$("body").height(wixHeight);windowHeight=wixHeight}}bookletWidth=isPageSpread()?W["width"]*2:bookletWidth;var bookletTopNavHeight=getTopNavHeight();var bookletBottomNavHeight=getBottomNavHeight();var navHeight=bookletTopNavHeight+bookletBottomNavHeight+2*bookletMargin;var viewHeight=windowHeight-navHeight;$global.bookletScale=1;var scale;if(setScale){scale=setScale}else{var widthRatio=windowWidth/bookletWidth;var heightRatio=viewHeight/bookletHeight;scale=includeHeight&&heightRatio<widthRatio?heightRatio:widthRatio}var bookletSpacing=Math.ceil((windowHeight-navHeight-bookletHeight)/2);var scaledBookletSpacing=Math.ceil((windowHeight-navHeight-bookletHeight*scale)/2);var top=bookletTopNavHeight+bookletMargin+bookletSpacing-(scaledBookletSpacing<0?scaledBookletSpacing:0);$global.bookletScale=scale;$bookletDiv.css("top",top+"px");bookletDivSetTransform();if(isEmbed()||$global.mobile){$("body, .booklet-container").css("height",windowHeight+"px")}setBookletDraggable()}function getTopNavHeight(){var topNavHeight=$(".top-nav").height()||0;var pageNavHeight=$(".booklet-page-nav.top-only:visible").height()||0;return topNavHeight+pageNavHeight}function getBottomNavHeight(){var bottomNavHeight=$(".booklet-page-nav.bottom-only:visible").height()||0;if($("#mobile-footer").length===1){const isVisible=$(".booklet-page-nav.bottom-only:visible").length>0;bottomNavHeight=isLandscape()&&!isEmbed()||!isVisible?0:parseInt(getComputedStyle(document.documentElement).getPropertyValue("--mobile-footer-height").trim(),10)}else if($("#desktop-bottomsheet:visible").length===1){bottomNavHeight=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--desktop-bottomsheet-height").trim(),10)}return bottomNavHeight}function bookletDivSetTransform(){var scale=$global.bookletScale;var rotate=(isTrifold()||isGatefold())&&isVertical()?" rotate(90deg)":"";$global.bookletDiv.css("transform","scale("+scale+","+scale+")"+rotate)}function isWix(){var wix=parseInt(parseQueryString("wix")||0);var bodyHasWix=$("body").hasClass("wix");return bodyHasWix||wix}function scaleBookletToDevice(){if(usePf5){if(IOS&&isWix()){$("#pageflip").height(parseQueryString("height"))}return}$(function(){if($global.edit){scaleBooklet()}else if($global.embed||$global.mobile){if(IOS&&inIframe()){setTimeout(function(){scaleBooklet(true)},3e3)}else{scaleBooklet(true)}}else{scaleBookletBySettings()}})}function scaleBookletBySettings(){if(W["scale"]==="fit"){scaleBooklet(true)}else if(W["scale"]==="fit-width"){scaleBooklet(false)}else{scaleBooklet(false,1)}bookletScales=setBookletScales(bookletScales,$global.bookletScale)}function setBookletScales(scaleList,currentScale){if(scaleList.indexOf(currentScale)>=0){return scaleList}var closestDiff=1e3;var closestScale=null;for(var i=0;i<scaleList.length;i++){var diff=Math.abs(scaleList[i]-currentScale);if(diff<closestDiff){closestDiff=diff;closestScale=i}}scaleList.splice(closestScale,1);scaleList.push(currentScale);scaleList.sort();return scaleList}$(document).on("click","#increaseScale",function(){if(usePf5){pageflip.zoomIn();Materialize.toast("Click and drag up or down to view the whole booklet.",4e3);setTimeout(zoomInTopCorrection,500);return}var s=$global.bookletScale;for(var i in bookletScales){if(bookletScales[i]>s){return scaleBooklet(false,bookletScales[i])}}});$(document).on("click","#decreaseScale",function(){if(usePf5){var $pf=$("#pageflip");var originalHeight=$pf.data("originalHeight");if(originalHeight){$pf.height(originalHeight)}pageflip.zoomOut();return}var s=$global.bookletScale;for(var i=bookletScales.length-1;i>=0;i--){if(bookletScales[i]<s){return scaleBooklet(false,bookletScales[i])}}});function isEmbed(){return window.location.href.indexOf("embed.php")>0}$(window).resize(function(e){if($(e.target).hasClass("ui-resizable")||editMode()){return}$("#loadingImg").height($(document).height());setBookletPosition();if(!usePf5){if(isWix()){$global.bookletDiv.parent().width(window.innerWidth).height(window.innerHeight)}if(HANDHELD){scaleBooklet(true)}else{scaleBookletBySettings()}}else{$("#pf-stage").height($("#pageflip").height())}});function get_image_url_base(){var domain=document.domain;return location.protocol+"//"+domain}function get_image_preview_url(width){var url_base=get_image_url_base();var width_path=width?"/w"+width:"";return url_base+"/thumbs"+width_path+"/"+W["key"]+".jpg"}$(document).on("click",".resultDiv.type-BUTTON_BUY ",function(){if(editMode()){return true}var url=$(this).find(".action-button-buy").data("buy_url");window.open(url,"_blank")});$(document).on("click",".resultDiv.LEAD, .nav_handle.LEAD, .resultDiv.type-BUTTON_GOOGLE_SPREADSHEET, .resultDiv.type-BUTTON_GOOGLE_PRESENTATION",function(){if(editMode()){return true}var $result=$(this);var workpad_entry_id=$result.data("id");var workpad_entry_data=workpadEntries[workpad_entry_id];var leadType=workpad_entry_data.content_type;var leadAction=leadTypeActions[leadType];if(typeof leadAction==="undefined"){console.log("unknown content_type for lead button click action: lead_type="+leadType);modalToast("Ooops, we're not sure what to do for this button.");return false}logEvent.call(this,leadType);if(typeof leadAction==="function"){if(leadType==="LEAD_FIND"){$(this).data("data",workpad_entry_data.data);return leadAction.call(this,workpad_entry_data.data)}return leadAction.call(this)}var page=+$global.currentPage;var json={page:page,workpad_entry_id:workpad_entry_id};var onClick=$result.attr("onclick");if(!onClick){modalOpen(leadAction,json,function(){var $popup=$("#"+leadAction);$popup.find("form").append("<input type='hidden' name='resultId' value='"+workpad_entry_id+"' />");setSocialTools()})}else{console.log("leadAction has onclick so not opening modal: ",leadAction,onClick)}return true});$(document).on("click",".resultDiv.action-lightbox-open, .resultDiv.type-BUTTON_LIGHTBOX_URL",function(){openLightbox($(this))});function openLightbox($this){if(editMode()){return true}var workpadEntryId=$this.data("id");var page=$this.closest(".pageDiv").attr("page");modalOpen("lightbox_url",{page:page,workpad_entry_id:workpadEntryId},function(popupId){var $popup=$("#"+popupId);$popup.find("form").append("<input type='hidden' name='resultId' value='"+workpadEntryId+"' />");setSocialTools()})}$(document).on("click",".event:not(.resultDiv.LEAD)",function(){logEvent.call(this,$(this).data("event-type"))});function logEvent(event_type,clickUrl){var $eventElement=$(this);var isWorkpadEntry=$eventElement.hasClass("resultDiv");$.ajax({url:"/workpad/workpad_event_log/log_event",data:{workpad_key:W["key"],event_type:event_type,workpad_entry_id:isWorkpadEntry?$eventElement.data("id"):null,page:$global.currentPage,click_url:clickUrl},type:"POST"})}function resultImageToBackground($resultDiv){var page=$resultDiv.data("page");var width=$resultDiv.width();var height=$resultDiv.height();var x=$resultDiv.data("x");var y=$resultDiv.data("y");var url=$resultDiv.data("url");var sticky=$resultDiv.data("sticky");var $pageDiv=sticky==="1"?$(".pageDiv,.tocPagePreview"):$("#pageDiv_"+page+",.tocPagePreview_"+page);var filename=$resultDiv.data("filename");if(typeof filename==="string"&&filename.indexOf("userFiles")>=0){filename=isSafari()?filename.replace(new RegExp(".webp"+"$"),".jpg"):filename;url="/"+filename}$pageDiv.pushBackgroundImage(url,{repeat:"no-repeat",position:x+"px "+y+"px",size:width+"px "+height+"px"});if(editMode()){if(page===$global.currentPage){$("#removeBackground").show()}$("#resultBackground").hide();$resultDiv.fadeOut().removeClass("type-IMAGE").addClass("type-BACKGROUND").removeClass("clicked");if(!(page in $global.backgroundImages))$global.backgroundImages[page]=[];if(jQuery.inArray($resultDiv,$global.backgroundImages[page])===-1){$global.backgroundImages[page].push($resultDiv)}}}function getAnimation(){return W["styles"]&&W["styles"].animation?W["styles"].animation:""}function isVertical(){return!editMode()&&getAnimation().indexOf("vertical")>=0}function isCardflip(){return!editMode()&&getAnimation().indexOf("cardflip")>=0}function isCardflipVertical(){return isCardflip()&&getAnimation().indexOf("vert")>=0}function isTrifold(){return getAnimation().indexOf("cardflip-trifold")>=0}function isTrifoldNoFoldBack(){return IOS||getAnimation().indexOf("cardflip-trifold-nofold")>=0}function isGatefold(){return getAnimation().indexOf("cardflip-gatefold")>=0}function isGatefoldSingle(){return getAnimation()==="cardflip-gatefold-single"}function isWall(){return!editMode()&&getAnimation().indexOf("wall")>=0}function wallTransitionPageSpacing(){return 25}function isPf5(){return!MOBILE&&!editMode()&&getAnimation().indexOf("turn")===0}function isPageSpread(){return usePf5&&getAnimation().indexOf("turn_double")===0||getAnimation().indexOf("cardflip-double")===0}function isShowingSinglePage(){return!isPageSpread()||isFirstPage()&&!isAlwaysOpened()||isLastPage()&&(isAlwaysOpened()?isEven($global.currentPage):isOdd($global.currentPage))}function isFirstPage(){return $global.currentPage===(isGatefoldSingle()?1:$global.firstPage)}function isLastPage(){return $global.currentPage===$global.lastPage}function isAlwaysOpened(){return usePf5&&W&&W.styles&&W.styles.always_opened==="1"}function openGoogleMapByAddressId(addressId){var windowReference=window.open();$.ajax({url:"/address/address/get_address",data:{address_id:addressId},error:function(){modalToast("We couldn't retrieve an address location at this time.")},success:function(json){if(json.status==="ok"&&json.data&&json.data.formatted){var address=json.data.formatted;windowReference.location="https://www.google.ca/maps/place/"+escape(address)}else if(json.status==="error"&&json.message){modalToast(json.message)}else{modalToast("An unknown error occurred.")}}})}function openLeadWebsite(url,clickAction){if(!url)return false;if(typeof clickAction==="undefined")clickAction="NEW_TAB";if(clickAction==="LIGHTBOX")modalOpen("lightbox_url",{url:url});else{$taget=clickAction==="CURRENT_TAB"?"_self":"_blank";window.open(url,$taget)}}(function($){$.fn.pushBackgroundImage=function(backgroundImage,options){var $this=$(this);$this.css("backgroundImage",'url("'+backgroundImage+'"),'+$this.css("background-image"));var repeat=options&&options.repeat?options.repeat:"repeat";$this.css("backgroundRepeat",repeat+","+$this.css("background-repeat"));var position=options&&options.position?options.position:"0% 0%";$this.css("backgroundPosition",position+","+$this.css("background-position"));var size=options&&options.size?options.size:"auto";$this.css("backgroundSize",size+","+$this.css("background-size"));return $this};$.fn.popBackgroundImage=function(){var $this=$(this);$this.css("backgroundImage",$this.css("background-image").replace(/^[^,]+,\s*/,""));$this.css("backgroundRepeat",$this.css("background-repeat").replace(/^[^,]+,\s*/,""));$this.css("backgroundPosition",$this.css("background-position").replace(/^[^,]+,\s*/,""));$this.css("backgroundSize",$this.css("background-size").replace(/^[^,]+,\s*/,""));return $this}})(jQuery);$.fn.extend({isImage:function(){var contentType=$(this).data("content_type");if($(this).hasClass("resultDiv")){return contentType==="IMAGE"}return false},isFroalaImage:function(){return $(this).hasClass("type-TEXT_FROALA_IMG")},isFroalaFitContainerImage:function(){return this.isFroalaImage()&&$(this).find(".froala-image-fit-container").length},isVideo:function(){if($(this).hasClass("resultDiv"))return $(this).data("content_type")==="VIDEO";return false},isText:function(){if($(this).hasClass("resultDiv")&&$(this).data("content_type"))return $(this).data("content_type").indexOf("TEXT")===0;return false}});$(document).ready(function(){processPostLoadModalQueue()});function processPostLoadModalQueue(){for(var i in post_load_modal_queue){post_load_modal_queue[i]()}post_load_modal_queue.length=0}function hasBorderShadow(){if(typeof W==="undefined"||typeof W["styles"]==="undefined"){return false}var styles=W["styles"];return styles["booklet_border_style"]===BOOKLET_SHADOW_CSS_CLASS}function setPf5BorderShadow(useShadow){if(usePf5){if(useShadow){$("#pf-dropshadow").show()}else{$("#pf-dropshadow").hide()}}}function isRightToLeft(){return!editMode()&&!(isTrifold()||isGatefold())&&W["transition_direction"]==="rtl"}$(document).on("change input","#page-range-slider",function(){var page=$(this).val();gotoPage(page-1,true)});function iframeOnload(page,autoplay){if((usePf5||page===0)&&autoplay&&hasVideos()){iframeOnloadAutoplayVideo.call(this,page)}resizeLocalIframe.call(this)}function resizeLocalIframe(){var src=$(this).attr("src");if(src&&src.indexOf("userFiles")>=0){var $iframe=$(this).contents().find("iframe");if($iframe.length){$iframe.attr("width","100%").attr("height","100%").css("width","100%").css("height","100%")}}}function setBookletPosition(){if(!usePf5&&typeof $global.bookletDiv!=="undefined"){if(typeof W!=="undefined"&&W["width"]&&W["height"]){$global.bookletDiv.width(parseInt(W["width"])||$global.bookletDiv.data("defaultWidth"));$global.bookletDiv.height(parseInt(W["height"])||$global.bookletDiv.data("defaultHeight"))}var marginOffset=typeof narrationModalWidth==="function"?narrationModalWidth():0;$global.bookletDiv.css("margin-left",-Math.floor(($global.bookletDiv.outerWidth()-marginOffset)/2)+"px");if(isWall()){$global.bookletDiv.css("top",parseInt(($("body").height()-$global.bookletDiv.height())/2)+"px")}}}$(document).on("click",".type-FILE a",function(){if(editMode()){return true}var filename=$(this).data("filename");if(filename){window.open(filename)}return false});function lazyLoadUpdate(){var pageThreshold=LAZYLOAD_PAGE_THRESHOLD;if(!bookletLazyLoad){return}bookletLazyLoad.update();var minPage=Math.max($global.currentPage-pageThreshold,0);var maxPage=Math.min($global.currentPage+pageThreshold,$global.lastPage);var pf5PageMultiplier=isPageSpread()?1:2;for(var pageNum=minPage;pageNum<=maxPage;pageNum++){var $pageDiv=$("#pageDiv_"+pageNum+", #page"+(pageNum*pf5PageMultiplier+1));$pageDiv.find("img,iframe,audio,video,source").each(function(){var $this=$(this);if($this.data("src")){$this.attr("src",$this.data("src")).data("src","")}})}}$(document).on("click",".pagecorner:not(.disable)",function(e){e.stopPropagation();var direction=$(this).hasClass("next")?1:-1;changePage(direction);return false});function createPageturnButtons(){var container=$("body");if(!$("#bookletPageNext").length){$("<div id='bookletPageNext' class='pagecorner rdp-pagecorner next'></div>").appendTo(container)}if(!$("#bookletPagePrev").length){$("<div id='bookletPagePrev' class='pagecorner rdp-pagecorner prev'></div>").appendTo(container)}}$(document).on("click","a.l",function(e){var href=$(this).attr("href");if(href.indexOf("#")===0){if(DEV)console.log("found internal link: ",href);var destDetail=$(this).data("dest-detail");if(DEV)console.log("destDetail typeof: ",typeof destDetail);if(destDetail.constructor===Array){e.stopImmediatePropagation();e.preventDefault();var page=destDetail[0]-1;if(DEV)console.log("page: ",page);gotoPage(page,true);if(DEV)console.log("trying to kill link click propagation 4");return false}}return true});$(document).on("mouseover","div.t:not(.click-checked)",function(){cloudConvertLink.call(this)});function cloudConvertLink(){if(!parseInt(W["link_autodetect"])){return}var text=$(this).text();var emailRegex=/[\w.-]+@\w+\.\w\w[\w.\/-]+/g;var urlRegex=/\b(https?:\/\/)?[\w-]+\.\w\w[\w.\/-?]+/g;var emails=text.match(emailRegex);var urls=text.match(urlRegex);var url=null;if(emails){var email=emails[0];url="mailto:"+email.replace(/(\.)$/g,"")}else if(urls){url=urls[0];url=url.replace(/(\.)$/g,"");if(/\d+\.\d+/.test(url)){url=null}else{url=url.indexOf("http")!==0?"http://"+url:url}}if(url){$(this).addClass("click-bound").data("url",url).css("cursor","pointer").click(function(){if(url.indexOf("mailto")===0){window.location.href=url}else{window.open(url)}})}$(this).addClass("click-checked")}function toggleFullscreen(publishUrl){var openNewTab=function(){window.open(publishUrl)};$(document.documentElement).toggleFullscreen(openNewTab,function(isFullscreen){setTimeout(function(){$(window).trigger("resize");if(isFullscreen&&!usePf5){scaleBookletToDevice()}},500)})}function bookletWheelPan(e){e.preventDefault();var $rdpDiv=$global.rdpDiv;var x0=parseInt($rdpDiv.css("left"));var y0=parseInt($rdpDiv.css("top"));var x=x0;var y=y0;var viewWidth=$(window).innerWidth();var viewHeight=$(window).innerHeight();var scaledWidth=bookletGetWidth()*$global.bookletScale;var scaledHeight=W["height"]*$global.bookletScale;var minX=(viewWidth-scaledWidth)/(2*$global.bookletScale);var minY=(viewHeight-scaledHeight)/$global.bookletScale;var maxX=-minX;var maxY=0;var panned=false;if(scaledWidth>viewWidth){x-=parseInt(e.deltaX);x=x>maxX?maxX:x<minX?minX:x;if(x!==x0){panned=true}}if(scaledHeight>viewHeight){y-=parseInt(e.deltaY);y=y>maxY?maxY:y<minY?minY:y;if(y!==y0){panned=true}}console.log("minY, y ",minY,y);if(panned){$global.bookletWheelPanned=true;$rdpDiv.left(x).top(y);return false}return true}function bookletWheelPanReset(){if($global.bookletWheelPanned){$global.bookletWheelPanned=false;$global.rdpDiv.css("left","0").css("top","0")}}function getBookletFoldWidth(){var multiples=1;if(isTrifold()){var triFoldPageWidths=[1,2,3,isTrifoldNoFoldBack()?3:1];multiples=triFoldPageWidths[$global.currentPage]}else if(isGatefold()){var quadFoldPageWidths=[1,2,4,2];multiples=quadFoldPageWidths[Math.min($global.currentPage,3)]}return multiples}function bookletGetWidth(includePageSpread){var width=W["width"];var multiples=includePageSpread&&isPageSpread()?2:getBookletFoldWidth();return width*multiples}if(!editMode()&&!IOS){$(document).on("mousedown","#rdpDiv",function(){$(this).toggleClass("mousedown",$(this).hasClass("draggable"));return true});$(document).on("mouseup mouseleave","#rdpDiv",function(e){var prevMove=$(this).data("prevMove");if(prevMove){var oldX=prevMove.clientX/$global.bookletScale;var oldY=prevMove.clientY/$global.bookletScale;var newX=$global.rdpDiv.hasClass("draggable-x")?e.clientX/$global.bookletScale:oldX;var newY=$global.rdpDiv.hasClass("draggable-y")?e.clientY/$global.bookletScale:oldY;dragMomentum.start("rdpDiv",oldX,oldY,prevMove.timeStamp);dragMomentum.end("rdpDiv",newX,newY,e.timeStamp,gridCheckBoundaryPosition)}$(this).removeClass("dragging mousedown").data("lastMove",null).data("prevMove",null);return true});$(document).on("mousemove","#rdpDiv",function(e){var $this=$(this);if(!$this.hasClass("mousedown")){return true}$this.addClass("dragging");var lastMove=$this.data("lastMove");if(!lastMove){$this.data("lastMove",e);return true}var x=parseInt($this.css("margin-left"));var y=parseInt($this.css("margin-top"));var deltaX=(e.clientX-lastMove.clientX)/$global.bookletScale;var deltaY=(e.clientY-lastMove.clientY)/$global.bookletScale;if(DEV)console.log("moousemove y: ",y,e.clientY,lastMove.clientY,deltaY);var position=gridCheckBoundaryPosition({x:x+deltaX,y:y+deltaY});if(DEV)console.log("moousemove x, clientX, lastClientX, deltaX, position.x: ",x,e.clientX,lastMove.clientX,deltaX,position.x);if($global.rdpDiv.hasClass("draggable-x")){$this.css("margin-left",position.x+"px")}if($global.rdpDiv.hasClass("draggable-y")){$this.css("margin-top",position.y+"px")}$this.data("prevMove",lastMove);$this.data("lastMove",e)});function gridCheckBoundaryPosition(position){var xMax=Math.max((bookletGetWidth(true)*$global.bookletScale-window.innerWidth)/(2*$global.bookletScale),0);var yMax=0;var xMin=-xMax;var yMin=-Math.max((W.height*$global.bookletScale-window.innerHeight)/$global.bookletScale,0);if(position.x<xMin){position.x=xMin}if(position.y<yMin){position.y=yMin}if(position.x>xMax){position.x=xMax}if(position.y>yMax){position.y=yMax}return position}}function setBookletDraggable(){if(editMode())return;if($global.mobile)return;var draggableX=bookletGetWidth(true)*$global.bookletScale>window.innerWidth;var draggableY=W["height"]*$global.bookletScale>window.innerHeight;var draggable=draggableX||draggableY;$global.rdpDiv.toggleClass("draggable",draggable);$global.rdpDiv.toggleClass("draggable-x",draggableX);$global.rdpDiv.toggleClass("draggable-y",draggableY);if(draggable){if($("#rdpDivDragOverlay").length===0){$('<div id="rdpDivDragOverlay"></div>').appendTo($global.rdpDiv)}}else{$("#rdpDivDragOverlay").remove()}if(!draggableX){$global.rdpDiv.animate({"margin-left":0},300)}if(!draggableY){$global.rdpDiv.animate({"margin-top":0},300)}}var dragMomentum=new function(){var howMuch=500;var minDrift=0;var easeType="easeOutQuad";var animateTime=700;var maxSpeed=3;var dXa=[0];var dYa=[0];var dTa=[0];this.start=function(elemId,Xa,Ya,Ta){dXa[elemId]=Xa;dYa[elemId]=Ya;dTa[elemId]=Ta};this.end=function(elemId,Xb,Yb,Tb,checkLimits){var $elem=$("#"+elemId);var Xa=dXa[elemId];var Ya=dYa[elemId];var Ta=dTa[elemId];var Xc=0;var Yc=0;var dDist=Math.sqrt(Math.pow(Xa-Xb,2)+Math.pow(Ya-Yb,2));var dTime=Tb-Ta;if(dTime<=0)return false;var dSpeed=dDist/dTime;dSpeed=Math.round(dSpeed*100)/100;if(dSpeed>maxSpeed){dSpeed=maxSpeed}var distX=Math.abs(Xa-Xb);var distY=Math.abs(Ya-Yb);if(distX+distY<.01){return false}var dVelX=minDrift+Math.round(distX*dSpeed*howMuch/(distX+distY));var dVelY=minDrift+Math.round(distY*dSpeed*howMuch/(distX+distY));var locX=parseInt($elem.css("margin-left"));var locY=parseInt($elem.css("margin-top"));if(dSpeed<=.06){return false}if(Xa>Xb){Xc=locX-dVelX}else{Xc=locX+dVelX}if(Ya>Yb){Yc=locY-dVelY}else{Yc=locY+dVelY}if(typeof checkLimits==="function"){var newPosition=checkLimits({x:Xc,y:Yc});Xc=newPosition.x;Yc=newPosition.y}var newLocX=Xc+"px";var newLocY=Yc+"px";$elem.addClass("animating").animate({marginLeft:newLocX,marginTop:newLocY},animateTime,easeType,function(){$(this).removeClass("animating")})}};function videoEndCredit(){var displayPage="body";$(".video-title-overlay").appendTo(displayPage).addClass("show");setTimeout(function(){$(".video-title-overlay").css("opacity",1)},1e3)}function setVideoEndCreditPage(pageNum){$global.videoEndCreditPage=pageNum}function linkFlash(page){if(imageMode()){return}var $page=isTrifold()||isGatefold()?$(".page"):pageContainer(usePf5?page*(isPageSpread()?1:2):page);$page.find("div.t:not(.click-checked)").each(cloudConvertLink);$page.find("a,.cursor-pointer:not(.LEAD),.click-bound,a.l>div").not(".link-flash,.animate").each(function(){$(this).addClass("link-flash click-bound").effect("highlight",{color:"#ffeb3b"},2e3,function(){$(this).removeClass("link-flash")})})}$(document).on("click",".action-addimageresult-display",function(){modalOpen("button-addimageresult",{workpad_entry_id:$(this).data("id")})});$(document).on("click",".action-addcaptionresult-display",function(){modalOpen("button-addcaptionresult",{workpad_entry_id:$(this).data("id")})});function addPageAudio(audioUrl){if(audioUrl){var audioElement=document.createElement("audio");audioElement.setAttribute("src",audioUrl);$global.pageAudio=audioElement;$global.pageAudio.volume=.1}else{$global.pageAudio=null}}function openDownloadModal(){paywallPrompt(W["id"],true)||modalOpen("public-vertical-card-download")}function paywallPrompt(workpadId,ignorePage=false){if(authorMode()){return}if(workpadId&&typeof workpadPaywallStartPage!=="undefined"&&workpadPaywallStartPage!==false&&(ignorePage||$global.currentPage>=workpadPaywallStartPage)){if($global.currentPage>workpadPaywallStartPage){gotoPage(workpadPaywallStartPage)}if(!isPaywallOpen()){return modalOpen("paywall-gateway",{},function(){paypalButton(workpadId)})}}}function isPaywallOpen(){return $("#paywall-gateway").is(":visible")}function leadGatePrompt(){if($global.leadGateOpened||authorMode()&&!previewMode()){return}var inviteKey=parseQueryString("invite_key")||"";if(+W["has_lead_gate"]&&W["lead_gate_start_page"]<=$global.currentPage&&inviteKey.length!==22){$global.leadGateOpened=true;modalOpen("lead_enterinfo",{wpKey:W["key"]},null,function(){typeof togglePageNarration==="function"&&togglePageNarration()})}}function isLeadgateOpen(){return $("#lead_enterinfo").is(":visible")}$(document).on("click",".action-leadgate-skip",function(){$.ajax({url:"/workpad/workpad_public/skip_lead_gate",data:{workpad_key:W["workpad_key"]}});modalClose()});function leadgateComplete($email,$name,$phone,$bizName){return!($email.length&&$email.val().trim().length===0||$phone.length&&$phone.val().trim().length===0||$name.length&&$name.val().trim().length===0||$bizName.length&&$bizName.val().trim().length===0)}function leadgateHasData($email,$name,$phone,$bizName){return $email.length&&$email.val().trim().length!==0||$phone.length&&$phone.val().trim().length!==0||$name.length&&$name.val().trim().length!==0||$bizName.length&&$bizName.val().trim().length!==0}$(document).on("click",".action-leadgate-submit",function(){var $form=$(this).closest("form");var $formError=$(".formerror");$formError.html("");var $name=$form.find("input[name=fullname]");var $phone=$form.find("input[name=phone]");var $email=$form.find("input[name=email]");var $bizName=$form.find("input[name=business_name]");var skip=+$form.find("input[name=skip]").val()===1;if(skip&&!leadgateHasData($email,$name,$phone,$bizName)){$(".action-leadgate-skip").trigger("click");modalClose();return false}else if(!skip&&!leadgateComplete($email,$name,$phone,$bizName)){$formError.html("This information is required.");return false}if($email.length){var email=$email.val().trim();if(email.length!==0)if(!validateEmail.test(email)){$formError.html("Email must have a valid format.");return false}}var namePattern=/^[a-zA-Z0-9\s]+$/;var phonePattern=/^\+?[0-9\s\-()]*$/;if($name.length&&!namePattern.test($name.val())){modalToast("Invalid name. Only letters and spaces are allowed.");return false}if($bizName.length&&!namePattern.test($bizName.val())){modalToast("Invalid business name. Only letters and spaces are allowed.");return false}if($phone.length&&!phonePattern.test($phone.val())){modalToast("Invalid phone number. Only digits are allowed.");return false}var data=$form.serialize();data.page=$global.currentPage;$.ajax({url:"/workpad/workpad_public/save_lead_gate",type:"POST",data:data,beforeSend:ajaxBefore,complete:ajaxComplete,success:function(json){if(json.status==="ok"){modalClose()}else{$(".formerror").html("Sorry, your information wasn't accepted. Please reload and try again.")}}});return false});$(document).on("click",".action-accept-cookies",acceptCookies);function acceptCookies(){var date=new Date;document.cookie=ACCEPT_COOKIES_COOKIE_KEY+"=accept; expires="+date.setDate(date.getDate()+365)+"; path="+window.location.pathname;modalClose()}function hasAnimate(){return typeof animateElement==="function"}function hasVideos(){return typeof manageStartPageVideos==="function"}function activePages(page){if(isPageSpread())return activePagesPageSpread(page);if(isTrifold())return activePagesTrifold(page);if(isGatefold())return activePagesGatefold(page);return[page]}function activePagesPageSpread(page){var spreadPage=page+(isEven(page)?-1:1);return spreadPage>=1&&spreadPage<=$global.lastPage?[page,spreadPage]:[page]}function activePagesTrifold(page){var trifoldPagesByPage={0:[0],1:[1,4],2:[1,2,3],3:[4,5,0]};return trifoldPagesByPage[+page]||[0]}function activePagesGatefold(page){var gatefoldPagesByPage={0:[0],1:[1,2],2:[3,4,5,6],3:[2,7,0,1]};return gatefoldPagesByPage[+page]||[0]}function removeBackgroundFromPage(page){$(".page-"+page).css("background-image","")}function isPwa(){return typeof isStandalone==="function"&&isStandalone()}window.addEventListener("message",function(event){if(event.origin!=="https://"+BASE_DOMAIN){if(DEV)console.log("Origin not allowed: ",event.origin,BASE_DOMAIN);return}if(event.data.command==="bookletEmail"){bookletEmail(event.data.argument)}});
!function(){"use strict";function e(e,t){if(e){if(t.element_.classList.contains(t.CssClasses_.MDL_JS_RIPPLE_EFFECT)){var s=document.createElement("span");s.classList.add(t.CssClasses_.MDL_RIPPLE_CONTAINER),s.classList.add(t.CssClasses_.MDL_JS_RIPPLE_EFFECT);var i=document.createElement("span");i.classList.add(t.CssClasses_.MDL_RIPPLE),s.appendChild(i),e.appendChild(s)}e.addEventListener("click",function(s){if("#"===e.getAttribute("href").charAt(0)){s.preventDefault();var i=e.href.split("#")[1],n=t.element_.querySelector("#"+i);t.resetTabState_(),t.resetPanelState_(),e.classList.add(t.CssClasses_.ACTIVE_CLASS),n.classList.add(t.CssClasses_.ACTIVE_CLASS)}})}}function t(e,t,s,i){function n(){var n=e.href.split("#")[1],a=i.content_.querySelector("#"+n);i.resetTabState_(t),i.resetPanelState_(s),e.classList.add(i.CssClasses_.IS_ACTIVE),a.classList.add(i.CssClasses_.IS_ACTIVE)}if(i.tabBar_.classList.contains(i.CssClasses_.JS_RIPPLE_EFFECT)){var a=document.createElement("span");a.classList.add(i.CssClasses_.RIPPLE_CONTAINER),a.classList.add(i.CssClasses_.JS_RIPPLE_EFFECT);var l=document.createElement("span");l.classList.add(i.CssClasses_.RIPPLE),a.appendChild(l),e.appendChild(a)}i.tabBar_.classList.contains(i.CssClasses_.TAB_MANUAL_SWITCH)||e.addEventListener("click",function(t){"#"===e.getAttribute("href").charAt(0)&&(t.preventDefault(),n())}),e.show=n}var s={upgradeDom:function(e,t){},upgradeElement:function(e,t){},upgradeElements:function(e){},upgradeAllRegistered:function(){},registerUpgradedCallback:function(e,t){},register:function(e){},downgradeElements:function(e){}};s=function(){function e(e,t){for(var s=0;s<c.length;s++)if(c[s].className===e)return"undefined"!=typeof t&&(c[s]=t),c[s];return!1}function t(e){var t=e.getAttribute("data-upgraded");return null===t?[""]:t.split(",")}function s(e,s){var i=t(e);return i.indexOf(s)!==-1}function i(e,t,s){if("CustomEvent"in window&&"function"==typeof window.CustomEvent)return new CustomEvent(e,{bubbles:t,cancelable:s});var i=document.createEvent("Events");return i.initEvent(e,t,s),i}function n(t,s){if("undefined"==typeof t&&"undefined"==typeof s)for(var i=0;i<c.length;i++)n(c[i].className,c[i].cssClass);else{var l=t;if("undefined"==typeof s){var o=e(l);o&&(s=o.cssClass)}for(var r=document.querySelectorAll("."+s),_=0;_<r.length;_++)a(r[_],l)}}function a(n,a){if(!("object"==typeof n&&n instanceof Element))throw new Error("Invalid argument provided to upgrade MDL element.");var l=i("mdl-componentupgrading",!0,!0);if(n.dispatchEvent(l),!l.defaultPrevented){var o=t(n),r=[];if(a)s(n,a)||r.push(e(a));else{var _=n.classList;c.forEach(function(e){_.contains(e.cssClass)&&r.indexOf(e)===-1&&!s(n,e.className)&&r.push(e)})}for(var d,h=0,u=r.length;h<u;h++){if(d=r[h],!d)throw new Error("Unable to find a registered component for the given class.");o.push(d.className),n.setAttribute("data-upgraded",o.join(","));var E=new d.classConstructor(n);E[C]=d,p.push(E);for(var m=0,L=d.callbacks.length;m<L;m++)d.callbacks[m](n);d.widget&&(n[d.className]=E);var I=i("mdl-componentupgraded",!0,!1);n.dispatchEvent(I)}}}function l(e){Array.isArray(e)||(e=e instanceof Element?[e]:Array.prototype.slice.call(e));for(var t,s=0,i=e.length;s<i;s++)t=e[s],t instanceof HTMLElement&&(a(t),t.children.length>0&&l(t.children))}function o(t){var s="undefined"==typeof t.widget&&"undefined"==typeof t.widget,i=!0;s||(i=t.widget||t.widget);var n={classConstructor:t.constructor||t.constructor,className:t.classAsString||t.classAsString,cssClass:t.cssClass||t.cssClass,widget:i,callbacks:[]};if(c.forEach(function(e){if(e.cssClass===n.cssClass)throw new Error("The provided cssClass has already been registered: "+e.cssClass);if(e.className===n.className)throw new Error("The provided className has already been registered")}),t.constructor.prototype.hasOwnProperty(C))throw new Error("MDL component classes must not have "+C+" defined as a property.");var a=e(t.classAsString,n);a||c.push(n)}function r(t,s){var i=e(t);i&&i.callbacks.push(s)}function _(){for(var e=0;e<c.length;e++)n(c[e].className)}function d(e){if(e){var t=p.indexOf(e);p.splice(t,1);var s=e.element_.getAttribute("data-upgraded").split(","),n=s.indexOf(e[C].classAsString);s.splice(n,1),e.element_.setAttribute("data-upgraded",s.join(","));var a=i("mdl-componentdowngraded",!0,!1);e.element_.dispatchEvent(a)}}function h(e){var t=function(e){p.filter(function(t){return t.element_===e}).forEach(d)};if(e instanceof Array||e instanceof NodeList)for(var s=0;s<e.length;s++)t(e[s]);else{if(!(e instanceof Node))throw new Error("Invalid argument provided to downgrade MDL nodes.");t(e)}}var c=[],p=[],C="mdlComponentConfigInternal_";return{upgradeDom:n,upgradeElement:a,upgradeElements:l,upgradeAllRegistered:_,registerUpgradedCallback:r,register:o,downgradeElements:h}}(),s.ComponentConfigPublic,s.ComponentConfig,s.Component,s.upgradeDom=s.upgradeDom,s.upgradeElement=s.upgradeElement,s.upgradeElements=s.upgradeElements,s.upgradeAllRegistered=s.upgradeAllRegistered,s.registerUpgradedCallback=s.registerUpgradedCallback,s.register=s.register,s.downgradeElements=s.downgradeElements,window.componentHandler=s,window.componentHandler=s,window.addEventListener("load",function(){"classList"in document.createElement("div")&&"querySelector"in document&&"addEventListener"in window&&Array.prototype.forEach?(document.documentElement.classList.add("mdl-js"),s.upgradeAllRegistered()):(s.upgradeElement=function(){},s.register=function(){})}),Date.now||(Date.now=function(){return(new Date).getTime()},Date.now=Date.now);for(var i=["webkit","moz"],n=0;n<i.length&&!window.requestAnimationFrame;++n){var a=i[n];window.requestAnimationFrame=window[a+"RequestAnimationFrame"],window.cancelAnimationFrame=window[a+"CancelAnimationFrame"]||window[a+"CancelRequestAnimationFrame"],window.requestAnimationFrame=window.requestAnimationFrame,window.cancelAnimationFrame=window.cancelAnimationFrame}if(/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent)||!window.requestAnimationFrame||!window.cancelAnimationFrame){var l=0;window.requestAnimationFrame=function(e){var t=Date.now(),s=Math.max(l+16,t);return setTimeout(function(){e(l=s)},s-t)},window.cancelAnimationFrame=clearTimeout,window.requestAnimationFrame=window.requestAnimationFrame,window.cancelAnimationFrame=window.cancelAnimationFrame}var o=function(e){this.element_=e,this.init()};window.MaterialButton=o,o.prototype.Constant_={},o.prototype.CssClasses_={RIPPLE_EFFECT:"mdl_js_ripple_effect",RIPPLE_CONTAINER:"mdl-button__ripple-container",RIPPLE:"mdl-ripple"},o.prototype.blurHandler_=function(e){e&&this.element_.blur()},o.prototype.disable=function(){this.element_.disabled=!0},o.prototype.disable=o.prototype.disable,o.prototype.enable=function(){this.element_.disabled=!1},o.prototype.enable=o.prototype.enable,o.prototype.init=function(){if(this.element_){if(this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)){var e=document.createElement("span");e.classList.add(this.CssClasses_.RIPPLE_CONTAINER),this.rippleElement_=document.createElement("span"),this.rippleElement_.classList.add(this.CssClasses_.RIPPLE),e.appendChild(this.rippleElement_),this.boundRippleBlurHandler=this.blurHandler_.bind(this),this.rippleElement_.addEventListener("mouseup",this.boundRippleBlurHandler),this.element_.appendChild(e)}this.boundButtonBlurHandler=this.blurHandler_.bind(this),this.element_.addEventListener("mouseup",this.boundButtonBlurHandler),this.element_.addEventListener("mouseleave",this.boundButtonBlurHandler)}},s.register({constructor:o,classAsString:"MaterialButton",cssClass:"mdl-js-button",widget:!0});var r=function(e){this.element_=e,this.init()};window.MaterialCheckbox=r,r.prototype.Constant_={TINY_TIMEOUT:.001},r.prototype.CssClasses_={INPUT:"mdl-checkbox__input",BOX_OUTLINE:"mdl-checkbox__box-outline",FOCUS_HELPER:"mdl-checkbox__focus-helper",TICK_OUTLINE:"mdl-checkbox__tick-outline",RIPPLE_EFFECT:"mdl_js_ripple_effect",RIPPLE_IGNORE_EVENTS:"mdl_js_ripple_effect--ignore-events",RIPPLE_CONTAINER:"mdl-checkbox__ripple-container",RIPPLE_CENTER:"mdl-ripple--center",RIPPLE:"mdl-ripple",IS_FOCUSED:"is-focused",IS_DISABLED:"is-disabled",IS_CHECKED:"is-checked",IS_UPGRADED:"is-upgraded"},r.prototype.onChange_=function(e){this.updateClasses_()},r.prototype.onFocus_=function(e){this.element_.classList.add(this.CssClasses_.IS_FOCUSED)},r.prototype.onBlur_=function(e){this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},r.prototype.onMouseUp_=function(e){this.blur_()},r.prototype.updateClasses_=function(){this.checkDisabled(),this.checkToggleState()},r.prototype.blur_=function(){window.setTimeout(function(){this.inputElement_.blur()}.bind(this),this.Constant_.TINY_TIMEOUT)},r.prototype.checkToggleState=function(){this.inputElement_.checked?this.element_.classList.add(this.CssClasses_.IS_CHECKED):this.element_.classList.remove(this.CssClasses_.IS_CHECKED)},r.prototype.checkToggleState=r.prototype.checkToggleState,r.prototype.checkDisabled=function(){this.inputElement_.disabled?this.element_.classList.add(this.CssClasses_.IS_DISABLED):this.element_.classList.remove(this.CssClasses_.IS_DISABLED)},r.prototype.checkDisabled=r.prototype.checkDisabled,r.prototype.disable=function(){this.inputElement_.disabled=!0,this.updateClasses_()},r.prototype.disable=r.prototype.disable,r.prototype.enable=function(){this.inputElement_.disabled=!1,this.updateClasses_()},r.prototype.enable=r.prototype.enable,r.prototype.check=function(){this.inputElement_.checked=!0,this.updateClasses_()},r.prototype.check=r.prototype.check,r.prototype.uncheck=function(){this.inputElement_.checked=!1,this.updateClasses_()},r.prototype.uncheck=r.prototype.uncheck,r.prototype.init=function(){if(this.element_){this.inputElement_=this.element_.querySelector("."+this.CssClasses_.INPUT);var e=document.createElement("span");e.classList.add(this.CssClasses_.BOX_OUTLINE);var t=document.createElement("span");t.classList.add(this.CssClasses_.FOCUS_HELPER);var s=document.createElement("span");if(s.classList.add(this.CssClasses_.TICK_OUTLINE),e.appendChild(s),this.element_.appendChild(t),this.element_.appendChild(e),this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)){this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS),this.rippleContainerElement_=document.createElement("span"),this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER),this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT),this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER),this.boundRippleMouseUp=this.onMouseUp_.bind(this),this.rippleContainerElement_.addEventListener("mouseup",this.boundRippleMouseUp);var i=document.createElement("span");i.classList.add(this.CssClasses_.RIPPLE),this.rippleContainerElement_.appendChild(i),this.element_.appendChild(this.rippleContainerElement_)}this.boundInputOnChange=this.onChange_.bind(this),this.boundInputOnFocus=this.onFocus_.bind(this),this.boundInputOnBlur=this.onBlur_.bind(this),this.boundElementMouseUp=this.onMouseUp_.bind(this),this.inputElement_.addEventListener("change",this.boundInputOnChange),this.inputElement_.addEventListener("focus",this.boundInputOnFocus),this.inputElement_.addEventListener("blur",this.boundInputOnBlur),this.element_.addEventListener("mouseup",this.boundElementMouseUp),this.updateClasses_(),this.element_.classList.add(this.CssClasses_.IS_UPGRADED)}},s.register({constructor:r,classAsString:"MaterialCheckbox",cssClass:"mdl-js-checkbox",widget:!0});var _=function(e){this.element_=e,this.init()};window.MaterialIconToggle=_,_.prototype.Constant_={TINY_TIMEOUT:.001},_.prototype.CssClasses_={INPUT:"mdl-icon-toggle__input",JS_RIPPLE_EFFECT:"mdl_js_ripple_effect",RIPPLE_IGNORE_EVENTS:"mdl_js_ripple_effect--ignore-events",RIPPLE_CONTAINER:"mdl-icon-toggle__ripple-container",RIPPLE_CENTER:"mdl-ripple--center",RIPPLE:"mdl-ripple",IS_FOCUSED:"is-focused",IS_DISABLED:"is-disabled",IS_CHECKED:"is-checked"},_.prototype.onChange_=function(e){this.updateClasses_()},_.prototype.onFocus_=function(e){this.element_.classList.add(this.CssClasses_.IS_FOCUSED)},_.prototype.onBlur_=function(e){this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},_.prototype.onMouseUp_=function(e){this.blur_()},_.prototype.updateClasses_=function(){this.checkDisabled(),this.checkToggleState()},_.prototype.blur_=function(){window.setTimeout(function(){this.inputElement_.blur()}.bind(this),this.Constant_.TINY_TIMEOUT)},_.prototype.checkToggleState=function(){this.inputElement_.checked?this.element_.classList.add(this.CssClasses_.IS_CHECKED):this.element_.classList.remove(this.CssClasses_.IS_CHECKED)},_.prototype.checkToggleState=_.prototype.checkToggleState,_.prototype.checkDisabled=function(){this.inputElement_.disabled?this.element_.classList.add(this.CssClasses_.IS_DISABLED):this.element_.classList.remove(this.CssClasses_.IS_DISABLED)},_.prototype.checkDisabled=_.prototype.checkDisabled,_.prototype.disable=function(){this.inputElement_.disabled=!0,this.updateClasses_()},_.prototype.disable=_.prototype.disable,_.prototype.enable=function(){this.inputElement_.disabled=!1,this.updateClasses_()},_.prototype.enable=_.prototype.enable,_.prototype.check=function(){this.inputElement_.checked=!0,this.updateClasses_()},_.prototype.check=_.prototype.check,_.prototype.uncheck=function(){this.inputElement_.checked=!1,this.updateClasses_()},_.prototype.uncheck=_.prototype.uncheck,_.prototype.init=function(){if(this.element_){if(this.inputElement_=this.element_.querySelector("."+this.CssClasses_.INPUT),this.element_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)){this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS),this.rippleContainerElement_=document.createElement("span"),this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER),this.rippleContainerElement_.classList.add(this.CssClasses_.JS_RIPPLE_EFFECT),this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER),this.boundRippleMouseUp=this.onMouseUp_.bind(this),this.rippleContainerElement_.addEventListener("mouseup",this.boundRippleMouseUp);var e=document.createElement("span");e.classList.add(this.CssClasses_.RIPPLE),this.rippleContainerElement_.appendChild(e),this.element_.appendChild(this.rippleContainerElement_)}this.boundInputOnChange=this.onChange_.bind(this),this.boundInputOnFocus=this.onFocus_.bind(this),this.boundInputOnBlur=this.onBlur_.bind(this),this.boundElementOnMouseUp=this.onMouseUp_.bind(this),this.inputElement_.addEventListener("change",this.boundInputOnChange),this.inputElement_.addEventListener("focus",this.boundInputOnFocus),this.inputElement_.addEventListener("blur",this.boundInputOnBlur),this.element_.addEventListener("mouseup",this.boundElementOnMouseUp),this.updateClasses_(),this.element_.classList.add("is-upgraded")}},s.register({constructor:_,classAsString:"MaterialIconToggle",cssClass:"mdl-js-icon-toggle",widget:!0});var d=function(e){this.element_=e,this.init()};window.MaterialMenu=d,d.prototype.Constant_={TRANSITION_DURATION_SECONDS:.3,TRANSITION_DURATION_FRACTION:.8,CLOSE_TIMEOUT:150},d.prototype.Keycodes_={ENTER:13,ESCAPE:27,SPACE:32,UP_ARROW:38,DOWN_ARROW:40},d.prototype.CssClasses_={CONTAINER:"mdl-menu__container",OUTLINE:"mdl-menu__outline",ITEM:"mdl-menu__item",ITEM_RIPPLE_CONTAINER:"mdl-menu__item-ripple-container",RIPPLE_EFFECT:"mdl_js_ripple_effect",RIPPLE_IGNORE_EVENTS:"mdl_js_ripple_effect--ignore-events",RIPPLE:"mdl-ripple",IS_UPGRADED:"is-upgraded",IS_VISIBLE:"is-visible",IS_ANIMATING:"is-animating",BOTTOM_LEFT:"mdl-menu--bottom-left",BOTTOM_RIGHT:"mdl-menu--bottom-right",TOP_LEFT:"mdl-menu--top-left",TOP_RIGHT:"mdl-menu--top-right",UNALIGNED:"mdl-menu--unaligned"},d.prototype.init=function(){if(this.element_){var e=document.createElement("div");e.classList.add(this.CssClasses_.CONTAINER),this.element_.parentElement.insertBefore(e,this.element_),this.element_.parentElement.removeChild(this.element_),e.appendChild(this.element_),this.container_=e;var t=document.createElement("div");t.classList.add(this.CssClasses_.OUTLINE),this.outline_=t,e.insertBefore(t,this.element_);var s=this.element_.getAttribute("for")||this.element_.getAttribute("data-mdl-for"),i=null;s&&(i=document.getElementById(s),i&&(this.forElement_=i,i.addEventListener("click",this.handleForClick_.bind(this)),i.addEventListener("keydown",this.handleForKeyboardEvent_.bind(this))));var n=this.element_.querySelectorAll("."+this.CssClasses_.ITEM);this.boundItemKeydown_=this.handleItemKeyboardEvent_.bind(this),this.boundItemClick_=this.handleItemClick_.bind(this);for(var a=0;a<n.length;a++)n[a].addEventListener("click",this.boundItemClick_),n[a].tabIndex="-1",n[a].addEventListener("keydown",this.boundItemKeydown_);if(this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT))for(this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS),a=0;a<n.length;a++){var l=n[a],o=document.createElement("span");o.classList.add(this.CssClasses_.ITEM_RIPPLE_CONTAINER);var r=document.createElement("span");r.classList.add(this.CssClasses_.RIPPLE),o.appendChild(r),l.appendChild(o),l.classList.add(this.CssClasses_.RIPPLE_EFFECT)}this.element_.classList.contains(this.CssClasses_.BOTTOM_LEFT)&&this.outline_.classList.add(this.CssClasses_.BOTTOM_LEFT),this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)&&this.outline_.classList.add(this.CssClasses_.BOTTOM_RIGHT),this.element_.classList.contains(this.CssClasses_.TOP_LEFT)&&this.outline_.classList.add(this.CssClasses_.TOP_LEFT),this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)&&this.outline_.classList.add(this.CssClasses_.TOP_RIGHT),this.element_.classList.contains(this.CssClasses_.UNALIGNED)&&this.outline_.classList.add(this.CssClasses_.UNALIGNED),e.classList.add(this.CssClasses_.IS_UPGRADED)}},d.prototype.handleForClick_=function(e){if(this.element_&&this.forElement_){var t=this.forElement_.getBoundingClientRect(),s=this.forElement_.parentElement.getBoundingClientRect();this.element_.classList.contains(this.CssClasses_.UNALIGNED)||(this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)?(this.container_.style.right=s.right-t.right+"px",this.container_.style.top=this.forElement_.offsetTop+this.forElement_.offsetHeight+"px"):this.element_.classList.contains(this.CssClasses_.TOP_LEFT)?(this.container_.style.left=this.forElement_.offsetLeft+"px",this.container_.style.bottom=s.bottom-t.top+"px"):this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)?(this.container_.style.right=s.right-t.right+"px",this.container_.style.bottom=s.bottom-t.top+"px"):(this.container_.style.left=this.forElement_.offsetLeft+"px",this.container_.style.top=this.forElement_.offsetTop+this.forElement_.offsetHeight+"px"))}this.toggle(e)},d.prototype.handleForKeyboardEvent_=function(e){if(this.element_&&this.container_&&this.forElement_){var t=this.element_.querySelectorAll("."+this.CssClasses_.ITEM+":not([disabled])");t&&t.length>0&&this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)&&(e.keyCode===this.Keycodes_.UP_ARROW?(e.preventDefault(),t[t.length-1].focus()):e.keyCode===this.Keycodes_.DOWN_ARROW&&(e.preventDefault(),t[0].focus()))}},d.prototype.handleItemKeyboardEvent_=function(e){if(this.element_&&this.container_){var t=this.element_.querySelectorAll("."+this.CssClasses_.ITEM+":not([disabled])");if(t&&t.length>0&&this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)){var s=Array.prototype.slice.call(t).indexOf(e.target);if(e.keyCode===this.Keycodes_.UP_ARROW)e.preventDefault(),s>0?t[s-1].focus():t[t.length-1].focus();else if(e.keyCode===this.Keycodes_.DOWN_ARROW)e.preventDefault(),t.length>s+1?t[s+1].focus():t[0].focus();else if(e.keyCode===this.Keycodes_.SPACE||e.keyCode===this.Keycodes_.ENTER){e.preventDefault();var i=new MouseEvent("mousedown");e.target.dispatchEvent(i),i=new MouseEvent("mouseup"),e.target.dispatchEvent(i),e.target.click()}else e.keyCode===this.Keycodes_.ESCAPE&&(e.preventDefault(),this.hide())}}},d.prototype.handleItemClick_=function(e){e.target.hasAttribute("disabled")?e.stopPropagation():(this.closing_=!0,window.setTimeout(function(e){this.hide(),this.closing_=!1}.bind(this),this.Constant_.CLOSE_TIMEOUT))},d.prototype.applyClip_=function(e,t){this.element_.classList.contains(this.CssClasses_.UNALIGNED)?this.element_.style.clip="":this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)?this.element_.style.clip="rect(0 "+t+"px 0 "+t+"px)":this.element_.classList.contains(this.CssClasses_.TOP_LEFT)?this.element_.style.clip="rect("+e+"px 0 "+e+"px 0)":this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)?this.element_.style.clip="rect("+e+"px "+t+"px "+e+"px "+t+"px)":this.element_.style.clip=""},d.prototype.removeAnimationEndListener_=function(e){e.target.classList.remove(d.prototype.CssClasses_.IS_ANIMATING)},d.prototype.addAnimationEndListener_=function(){this.element_.addEventListener("transitionend",this.removeAnimationEndListener_),this.element_.addEventListener("webkitTransitionEnd",this.removeAnimationEndListener_)},d.prototype.show=function(e){if(this.element_&&this.container_&&this.outline_){var t=this.element_.getBoundingClientRect().height,s=this.element_.getBoundingClientRect().width;this.container_.style.width=s+"px",this.container_.style.height=t+"px",this.outline_.style.width=s+"px",this.outline_.style.height=t+"px";for(var i=this.Constant_.TRANSITION_DURATION_SECONDS*this.Constant_.TRANSITION_DURATION_FRACTION,n=this.element_.querySelectorAll("."+this.CssClasses_.ITEM),a=0;a<n.length;a++){var l=null;l=this.element_.classList.contains(this.CssClasses_.TOP_LEFT)||this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)?(t-n[a].offsetTop-n[a].offsetHeight)/t*i+"s":n[a].offsetTop/t*i+"s",n[a].style.transitionDelay=l}this.applyClip_(t,s),window.requestAnimationFrame(function(){this.element_.classList.add(this.CssClasses_.IS_ANIMATING),this.element_.style.clip="rect(0 "+s+"px "+t+"px 0)",this.container_.classList.add(this.CssClasses_.IS_VISIBLE)}.bind(this)),this.addAnimationEndListener_();var o=function(t){t===e||this.closing_||t.target.parentNode===this.element_||(document.removeEventListener("click",o),this.hide())}.bind(this);document.addEventListener("click",o)}},d.prototype.show=d.prototype.show,d.prototype.hide=function(){if(this.element_&&this.container_&&this.outline_){for(var e=this.element_.querySelectorAll("."+this.CssClasses_.ITEM),t=0;t<e.length;t++)e[t].style.removeProperty("transition-delay");var s=this.element_.getBoundingClientRect(),i=s.height,n=s.width;this.element_.classList.add(this.CssClasses_.IS_ANIMATING),this.applyClip_(i,n),this.container_.classList.remove(this.CssClasses_.IS_VISIBLE),this.addAnimationEndListener_()}},d.prototype.hide=d.prototype.hide,d.prototype.toggle=function(e){this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)?this.hide():this.show(e)},d.prototype.toggle=d.prototype.toggle,s.register({constructor:d,classAsString:"MaterialMenu",cssClass:"mdl-js-menu",widget:!0});var h=function(e){this.element_=e,this.init()};window.MaterialProgress=h,h.prototype.Constant_={},h.prototype.CssClasses_={INDETERMINATE_CLASS:"mdl-progress__indeterminate"},h.prototype.setProgress=function(e){this.element_.classList.contains(this.CssClasses_.INDETERMINATE_CLASS)||(this.progressbar_.style.width=e+"%")},h.prototype.setProgress=h.prototype.setProgress,h.prototype.setBuffer=function(e){this.bufferbar_.style.width=e+"%",this.auxbar_.style.width=100-e+"%"},h.prototype.setBuffer=h.prototype.setBuffer,h.prototype.init=function(){if(this.element_){var e=document.createElement("div");e.className="progressbar bar bar1",this.element_.appendChild(e),this.progressbar_=e,e=document.createElement("div"),e.className="bufferbar bar bar2",this.element_.appendChild(e),this.bufferbar_=e,e=document.createElement("div"),e.className="auxbar bar bar3",this.element_.appendChild(e),this.auxbar_=e,this.progressbar_.style.width="0%",this.bufferbar_.style.width="100%",this.auxbar_.style.width="0%",this.element_.classList.add("is-upgraded")}},s.register({constructor:h,classAsString:"MaterialProgress",cssClass:"mdl-js-progress",widget:!0});var c=function(e){this.element_=e,this.init()};window.MaterialRadio=c,c.prototype.Constant_={TINY_TIMEOUT:.001},c.prototype.CssClasses_={IS_FOCUSED:"is-focused",IS_DISABLED:"is-disabled",IS_CHECKED:"is-checked",IS_UPGRADED:"is-upgraded",JS_RADIO:"mdl-js-radio",RADIO_BTN:"mdl-radio__button",RADIO_OUTER_CIRCLE:"mdl-radio__outer-circle",RADIO_INNER_CIRCLE:"mdl-radio__inner-circle",RIPPLE_EFFECT:"mdl_js_ripple_effect",RIPPLE_IGNORE_EVENTS:"mdl_js_ripple_effect--ignore-events",RIPPLE_CONTAINER:"mdl-radio__ripple-container",RIPPLE_CENTER:"mdl-ripple--center",RIPPLE:"mdl-ripple"},c.prototype.onChange_=function(e){for(var t=document.getElementsByClassName(this.CssClasses_.JS_RADIO),s=0;s<t.length;s++){var i=t[s].querySelector("."+this.CssClasses_.RADIO_BTN);i.getAttribute("name")===this.btnElement_.getAttribute("name")&&"undefined"!=typeof t[s].MaterialRadio&&t[s].MaterialRadio.updateClasses_()}},c.prototype.onFocus_=function(e){this.element_.classList.add(this.CssClasses_.IS_FOCUSED)},c.prototype.onBlur_=function(e){this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},c.prototype.onMouseup_=function(e){this.blur_()},c.prototype.updateClasses_=function(){this.checkDisabled(),this.checkToggleState()},c.prototype.blur_=function(){window.setTimeout(function(){this.btnElement_.blur()}.bind(this),this.Constant_.TINY_TIMEOUT)},c.prototype.checkDisabled=function(){this.btnElement_.disabled?this.element_.classList.add(this.CssClasses_.IS_DISABLED):this.element_.classList.remove(this.CssClasses_.IS_DISABLED)},c.prototype.checkDisabled=c.prototype.checkDisabled,c.prototype.checkToggleState=function(){this.btnElement_.checked?this.element_.classList.add(this.CssClasses_.IS_CHECKED):this.element_.classList.remove(this.CssClasses_.IS_CHECKED)},c.prototype.checkToggleState=c.prototype.checkToggleState,c.prototype.disable=function(){this.btnElement_.disabled=!0,this.updateClasses_()},c.prototype.disable=c.prototype.disable,c.prototype.enable=function(){this.btnElement_.disabled=!1,this.updateClasses_()},c.prototype.enable=c.prototype.enable,c.prototype.check=function(){this.btnElement_.checked=!0,this.onChange_(null)},c.prototype.check=c.prototype.check,c.prototype.uncheck=function(){this.btnElement_.checked=!1,this.onChange_(null)},c.prototype.uncheck=c.prototype.uncheck,c.prototype.init=function(){if(this.element_){this.btnElement_=this.element_.querySelector("."+this.CssClasses_.RADIO_BTN),this.boundChangeHandler_=this.onChange_.bind(this),this.boundFocusHandler_=this.onChange_.bind(this),this.boundBlurHandler_=this.onBlur_.bind(this),this.boundMouseUpHandler_=this.onMouseup_.bind(this);var e=document.createElement("span");e.classList.add(this.CssClasses_.RADIO_OUTER_CIRCLE);var t=document.createElement("span");t.classList.add(this.CssClasses_.RADIO_INNER_CIRCLE),this.element_.appendChild(e),this.element_.appendChild(t);var s;if(this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)){this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS),s=document.createElement("span"),s.classList.add(this.CssClasses_.RIPPLE_CONTAINER),s.classList.add(this.CssClasses_.RIPPLE_EFFECT),s.classList.add(this.CssClasses_.RIPPLE_CENTER),s.addEventListener("mouseup",this.boundMouseUpHandler_);var i=document.createElement("span");i.classList.add(this.CssClasses_.RIPPLE),s.appendChild(i),this.element_.appendChild(s)}this.btnElement_.addEventListener("change",this.boundChangeHandler_),this.btnElement_.addEventListener("focus",this.boundFocusHandler_),this.btnElement_.addEventListener("blur",this.boundBlurHandler_),this.element_.addEventListener("mouseup",this.boundMouseUpHandler_),this.updateClasses_(),this.element_.classList.add(this.CssClasses_.IS_UPGRADED)}},s.register({constructor:c,classAsString:"MaterialRadio",cssClass:"mdl-js-radio",widget:!0});var p=function(e){this.element_=e,this.isIE_=window.navigator.msPointerEnabled,this.init()};window.MaterialSlider=p,p.prototype.Constant_={},p.prototype.CssClasses_={IE_CONTAINER:"mdl-slider__ie-container",SLIDER_CONTAINER:"mdl-slider__container",BACKGROUND_FLEX:"mdl-slider__background-flex",BACKGROUND_LOWER:"mdl-slider__background-lower",BACKGROUND_UPPER:"mdl-slider__background-upper",IS_LOWEST_VALUE:"is-lowest-value",IS_UPGRADED:"is-upgraded"},p.prototype.onInput_=function(e){this.updateValueStyles_()},p.prototype.onChange_=function(e){this.updateValueStyles_()},p.prototype.onMouseUp_=function(e){e.target.blur()},p.prototype.onContainerMouseDown_=function(e){if(e.target===this.element_.parentElement){e.preventDefault();var t=new MouseEvent("mousedown",{target:e.target,buttons:e.buttons,clientX:e.clientX,clientY:this.element_.getBoundingClientRect().y});this.element_.dispatchEvent(t)}},p.prototype.updateValueStyles_=function(){var e=(this.element_.value-this.element_.min)/(this.element_.max-this.element_.min);0===e?this.element_.classList.add(this.CssClasses_.IS_LOWEST_VALUE):this.element_.classList.remove(this.CssClasses_.IS_LOWEST_VALUE),this.isIE_||(this.backgroundLower_.style.flex=e,this.backgroundLower_.style.webkitFlex=e,this.backgroundUpper_.style.flex=1-e,this.backgroundUpper_.style.webkitFlex=1-e)},p.prototype.disable=function(){this.element_.disabled=!0},p.prototype.disable=p.prototype.disable,p.prototype.enable=function(){this.element_.disabled=!1},p.prototype.enable=p.prototype.enable,p.prototype.change=function(e){"undefined"!=typeof e&&(this.element_.value=e),this.updateValueStyles_()},p.prototype.change=p.prototype.change,p.prototype.init=function(){if(this.element_){if(this.isIE_){var e=document.createElement("div");e.classList.add(this.CssClasses_.IE_CONTAINER),this.element_.parentElement.insertBefore(e,this.element_),this.element_.parentElement.removeChild(this.element_),e.appendChild(this.element_)}else{var t=document.createElement("div");t.classList.add(this.CssClasses_.SLIDER_CONTAINER),this.element_.parentElement.insertBefore(t,this.element_),this.element_.parentElement.removeChild(this.element_),t.appendChild(this.element_);var s=document.createElement("div");s.classList.add(this.CssClasses_.BACKGROUND_FLEX),t.appendChild(s),this.backgroundLower_=document.createElement("div"),this.backgroundLower_.classList.add(this.CssClasses_.BACKGROUND_LOWER),s.appendChild(this.backgroundLower_),this.backgroundUpper_=document.createElement("div"),this.backgroundUpper_.classList.add(this.CssClasses_.BACKGROUND_UPPER),s.appendChild(this.backgroundUpper_)}this.boundInputHandler=this.onInput_.bind(this),this.boundChangeHandler=this.onChange_.bind(this),this.boundMouseUpHandler=this.onMouseUp_.bind(this),this.boundContainerMouseDownHandler=this.onContainerMouseDown_.bind(this),this.element_.addEventListener("input",this.boundInputHandler),this.element_.addEventListener("change",this.boundChangeHandler),this.element_.addEventListener("mouseup",this.boundMouseUpHandler),this.element_.parentElement.addEventListener("mousedown",this.boundContainerMouseDownHandler),this.updateValueStyles_(),this.element_.classList.add(this.CssClasses_.IS_UPGRADED)}},s.register({constructor:p,classAsString:"MaterialSlider",cssClass:"mdl-js-slider",widget:!0});var C=function(e){if(this.element_=e,this.textElement_=this.element_.querySelector("."+this.cssClasses_.MESSAGE),this.actionElement_=this.element_.querySelector("."+this.cssClasses_.ACTION),!this.textElement_)throw new Error("There must be a message element for a snackbar.");if(!this.actionElement_)throw new Error("There must be an action element for a snackbar.");this.active=!1,this.actionHandler_=void 0,this.message_=void 0,this.actionText_=void 0,this.queuedNotifications_=[],this.setActionHidden_(!0)};window.MaterialSnackbar=C,C.prototype.Constant_={ANIMATION_LENGTH:250},C.prototype.cssClasses_={SNACKBAR:"mdl-snackbar",MESSAGE:"mdl-snackbar__text",ACTION:"mdl-snackbar__action",ACTIVE:"mdl-snackbar--active"},C.prototype.displaySnackbar_=function(){this.element_.setAttribute("aria-hidden","true"),this.actionHandler_&&(this.actionElement_.textContent=this.actionText_,this.actionElement_.addEventListener("click",this.actionHandler_),this.setActionHidden_(!1)),this.textElement_.textContent=this.message_,this.element_.classList.add(this.cssClasses_.ACTIVE),this.element_.setAttribute("aria-hidden","false"),setTimeout(this.cleanup_.bind(this),this.timeout_)},C.prototype.showSnackbar=function(e){if(void 0===e)throw new Error("Please provide a data object with at least a message to display.");if(void 0===e.message)throw new Error("Please provide a message to be displayed.");if(e.actionHandler&&!e.actionText)throw new Error("Please provide action text with the handler.");this.active?this.queuedNotifications_.push(e):(this.active=!0,this.message_=e.message,e.timeout?this.timeout_=e.timeout:this.timeout_=2750,e.actionHandler&&(this.actionHandler_=e.actionHandler),e.actionText&&(this.actionText_=e.actionText),this.displaySnackbar_())},C.prototype.showSnackbar=C.prototype.showSnackbar,C.prototype.checkQueue_=function(){this.queuedNotifications_.length>0&&this.showSnackbar(this.queuedNotifications_.shift())},C.prototype.cleanup_=function(){this.element_.classList.remove(this.cssClasses_.ACTIVE),setTimeout(function(){this.element_.setAttribute("aria-hidden","true"),this.textElement_.textContent="",Boolean(this.actionElement_.getAttribute("aria-hidden"))||(this.setActionHidden_(!0),this.actionElement_.textContent="",this.actionElement_.removeEventListener("click",this.actionHandler_)),this.actionHandler_=void 0,this.message_=void 0,this.actionText_=void 0,this.active=!1,this.checkQueue_()}.bind(this),this.Constant_.ANIMATION_LENGTH)},C.prototype.setActionHidden_=function(e){e?this.actionElement_.setAttribute("aria-hidden","true"):this.actionElement_.removeAttribute("aria-hidden")},s.register({constructor:C,classAsString:"MaterialSnackbar",cssClass:"mdl-js-snackbar",widget:!0});var u=function(e){this.element_=e,this.init()};window.MaterialSpinner=u,u.prototype.Constant_={MDL_SPINNER_LAYER_COUNT:4},u.prototype.CssClasses_={MDL_SPINNER_LAYER:"mdl-spinner__layer",MDL_SPINNER_CIRCLE_CLIPPER:"mdl-spinner__circle-clipper",MDL_SPINNER_CIRCLE:"mdl-spinner__circle",MDL_SPINNER_GAP_PATCH:"mdl-spinner__gap-patch",MDL_SPINNER_LEFT:"mdl-spinner__left",MDL_SPINNER_RIGHT:"mdl-spinner__right"},u.prototype.createLayer=function(e){var t=document.createElement("div");t.classList.add(this.CssClasses_.MDL_SPINNER_LAYER),t.classList.add(this.CssClasses_.MDL_SPINNER_LAYER+"-"+e);var s=document.createElement("div");s.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER),s.classList.add(this.CssClasses_.MDL_SPINNER_LEFT);var i=document.createElement("div");i.classList.add(this.CssClasses_.MDL_SPINNER_GAP_PATCH);var n=document.createElement("div");n.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER),n.classList.add(this.CssClasses_.MDL_SPINNER_RIGHT);for(var a=[s,i,n],l=0;l<a.length;l++){var o=document.createElement("div");o.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE),a[l].appendChild(o)}t.appendChild(s),t.appendChild(i),t.appendChild(n),this.element_.appendChild(t)},u.prototype.createLayer=u.prototype.createLayer,u.prototype.stop=function(){this.element_.classList.remove("is-active")},u.prototype.stop=u.prototype.stop,u.prototype.start=function(){this.element_.classList.add("is-active")},u.prototype.start=u.prototype.start,u.prototype.init=function(){if(this.element_){for(var e=1;e<=this.Constant_.MDL_SPINNER_LAYER_COUNT;e++)this.createLayer(e);this.element_.classList.add("is-upgraded")}},s.register({constructor:u,classAsString:"MaterialSpinner",cssClass:"mdl-js-spinner",widget:!0});var E=function(e){this.element_=e,this.init()};window.MaterialSwitch=E,E.prototype.Constant_={TINY_TIMEOUT:.001},E.prototype.CssClasses_={INPUT:"mdl-switch__input",TRACK:"mdl-switch__track",THUMB:"mdl-switch__thumb",FOCUS_HELPER:"mdl-switch__focus-helper",RIPPLE_EFFECT:"mdl_js_ripple_effect",RIPPLE_IGNORE_EVENTS:"mdl_js_ripple_effect--ignore-events",RIPPLE_CONTAINER:"mdl-switch__ripple-container",RIPPLE_CENTER:"mdl-ripple--center",RIPPLE:"mdl-ripple",IS_FOCUSED:"is-focused",IS_DISABLED:"is-disabled",IS_CHECKED:"is-checked"},E.prototype.onChange_=function(e){this.updateClasses_()},E.prototype.onFocus_=function(e){this.element_.classList.add(this.CssClasses_.IS_FOCUSED)},E.prototype.onBlur_=function(e){this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},E.prototype.onMouseUp_=function(e){this.blur_()},E.prototype.updateClasses_=function(){this.checkDisabled(),this.checkToggleState()},E.prototype.blur_=function(){window.setTimeout(function(){this.inputElement_.blur()}.bind(this),this.Constant_.TINY_TIMEOUT)},E.prototype.checkDisabled=function(){this.inputElement_.disabled?this.element_.classList.add(this.CssClasses_.IS_DISABLED):this.element_.classList.remove(this.CssClasses_.IS_DISABLED)},E.prototype.checkDisabled=E.prototype.checkDisabled,E.prototype.checkToggleState=function(){this.inputElement_.checked?this.element_.classList.add(this.CssClasses_.IS_CHECKED):this.element_.classList.remove(this.CssClasses_.IS_CHECKED)},E.prototype.checkToggleState=E.prototype.checkToggleState,E.prototype.disable=function(){this.inputElement_.disabled=!0,this.updateClasses_()},E.prototype.disable=E.prototype.disable,E.prototype.enable=function(){this.inputElement_.disabled=!1,this.updateClasses_()},E.prototype.enable=E.prototype.enable,E.prototype.on=function(){this.inputElement_.checked=!0,this.updateClasses_()},E.prototype.on=E.prototype.on,E.prototype.off=function(){this.inputElement_.checked=!1,this.updateClasses_()},E.prototype.off=E.prototype.off,E.prototype.init=function(){if(this.element_){this.inputElement_=this.element_.querySelector("."+this.CssClasses_.INPUT);var e=document.createElement("div");e.classList.add(this.CssClasses_.TRACK);var t=document.createElement("div");t.classList.add(this.CssClasses_.THUMB);var s=document.createElement("span");if(s.classList.add(this.CssClasses_.FOCUS_HELPER),t.appendChild(s),this.element_.appendChild(e),this.element_.appendChild(t),this.boundMouseUpHandler=this.onMouseUp_.bind(this),this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)){this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS),this.rippleContainerElement_=document.createElement("span"),this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER),this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT),this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER),this.rippleContainerElement_.addEventListener("mouseup",this.boundMouseUpHandler);var i=document.createElement("span");i.classList.add(this.CssClasses_.RIPPLE),this.rippleContainerElement_.appendChild(i),this.element_.appendChild(this.rippleContainerElement_)}this.boundChangeHandler=this.onChange_.bind(this),this.boundFocusHandler=this.onFocus_.bind(this),this.boundBlurHandler=this.onBlur_.bind(this),this.inputElement_.addEventListener("change",this.boundChangeHandler),this.inputElement_.addEventListener("focus",this.boundFocusHandler),this.inputElement_.addEventListener("blur",this.boundBlurHandler),this.element_.addEventListener("mouseup",this.boundMouseUpHandler),this.updateClasses_(),this.element_.classList.add("is-upgraded")}},s.register({constructor:E,classAsString:"MaterialSwitch",cssClass:"mdl-js-switch",widget:!0});var m=function(e){this.element_=e,this.init()};window.MaterialTabs=m,m.prototype.Constant_={},m.prototype.CssClasses_={TAB_CLASS:"mdl-tabs__tab",PANEL_CLASS:"mdl-tabs__panel",ACTIVE_CLASS:"is-active",UPGRADED_CLASS:"is-upgraded",MDL_JS_RIPPLE_EFFECT:"mdl_js_ripple_effect",MDL_RIPPLE_CONTAINER:"mdl-tabs__ripple-container",MDL_RIPPLE:"mdl-ripple",MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS:"mdl_js_ripple_effect--ignore-events"},m.prototype.initTabs_=function(){this.element_.classList.contains(this.CssClasses_.MDL_JS_RIPPLE_EFFECT)&&this.element_.classList.add(this.CssClasses_.MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS),this.tabs_=this.element_.querySelectorAll("."+this.CssClasses_.TAB_CLASS),this.panels_=this.element_.querySelectorAll("."+this.CssClasses_.PANEL_CLASS);for(var t=0;t<this.tabs_.length;t++)new e(this.tabs_[t],this);this.element_.classList.add(this.CssClasses_.UPGRADED_CLASS)},m.prototype.resetTabState_=function(){for(var e=0;e<this.tabs_.length;e++)this.tabs_[e].classList.remove(this.CssClasses_.ACTIVE_CLASS)},m.prototype.resetPanelState_=function(){for(var e=0;e<this.panels_.length;e++)this.panels_[e].classList.remove(this.CssClasses_.ACTIVE_CLASS)},m.prototype.init=function(){this.element_&&this.initTabs_()},s.register({constructor:m,classAsString:"MaterialTabs",cssClass:"mdl-js-tabs"});var L=function(e){this.element_=e,this.maxRows=this.Constant_.NO_MAX_ROWS,this.init()};window.MaterialTextfield=L,L.prototype.Constant_={NO_MAX_ROWS:-1,MAX_ROWS_ATTRIBUTE:"maxrows"},L.prototype.CssClasses_={LABEL:"mdl-textfield__label",INPUT:"mdl-textfield__input",IS_DIRTY:"is-dirty",IS_FOCUSED:"is-focused",IS_DISABLED:"is-disabled",IS_INVALID:"is-invalid",IS_UPGRADED:"is-upgraded",HAS_PLACEHOLDER:"has-placeholder"},L.prototype.onKeyDown_=function(e){var t=e.target.value.split("\n").length;13===e.keyCode&&t>=this.maxRows&&e.preventDefault()},L.prototype.onFocus_=function(e){this.element_.classList.add(this.CssClasses_.IS_FOCUSED)},L.prototype.onBlur_=function(e){this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},L.prototype.onReset_=function(e){this.updateClasses_()},L.prototype.updateClasses_=function(){this.checkDisabled(),this.checkValidity(),this.checkDirty(),this.checkFocus()},L.prototype.checkDisabled=function(){this.input_.disabled?this.element_.classList.add(this.CssClasses_.IS_DISABLED):this.element_.classList.remove(this.CssClasses_.IS_DISABLED)},L.prototype.checkDisabled=L.prototype.checkDisabled,L.prototype.checkFocus=function(){Boolean(this.element_.querySelector(":focus"))?this.element_.classList.add(this.CssClasses_.IS_FOCUSED):this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},L.prototype.checkFocus=L.prototype.checkFocus,L.prototype.checkValidity=function(){this.input_.validity&&(this.input_.validity.valid?this.element_.classList.remove(this.CssClasses_.IS_INVALID):this.element_.classList.add(this.CssClasses_.IS_INVALID))},L.prototype.checkValidity=L.prototype.checkValidity,L.prototype.checkDirty=function(){this.input_.value&&this.input_.value.length>0?this.element_.classList.add(this.CssClasses_.IS_DIRTY):this.element_.classList.remove(this.CssClasses_.IS_DIRTY)},L.prototype.checkDirty=L.prototype.checkDirty,L.prototype.disable=function(){this.input_.disabled=!0,this.updateClasses_()},L.prototype.disable=L.prototype.disable,L.prototype.enable=function(){this.input_.disabled=!1,this.updateClasses_()},L.prototype.enable=L.prototype.enable,L.prototype.change=function(e){this.input_.value=e||"",this.updateClasses_()},L.prototype.change=L.prototype.change,L.prototype.init=function(){if(this.element_&&(this.label_=this.element_.querySelector("."+this.CssClasses_.LABEL),this.input_=this.element_.querySelector("."+this.CssClasses_.INPUT),this.input_)){this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)&&(this.maxRows=parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE),10),isNaN(this.maxRows)&&(this.maxRows=this.Constant_.NO_MAX_ROWS)),this.input_.hasAttribute("placeholder")&&this.element_.classList.add(this.CssClasses_.HAS_PLACEHOLDER),this.boundUpdateClassesHandler=this.updateClasses_.bind(this),this.boundFocusHandler=this.onFocus_.bind(this),this.boundBlurHandler=this.onBlur_.bind(this),this.boundResetHandler=this.onReset_.bind(this),this.input_.addEventListener("input",this.boundUpdateClassesHandler),this.input_.addEventListener("focus",this.boundFocusHandler),this.input_.addEventListener("blur",this.boundBlurHandler),this.input_.addEventListener("reset",this.boundResetHandler),this.maxRows!==this.Constant_.NO_MAX_ROWS&&(this.boundKeyDownHandler=this.onKeyDown_.bind(this),this.input_.addEventListener("keydown",this.boundKeyDownHandler));var e=this.element_.classList.contains(this.CssClasses_.IS_INVALID);this.updateClasses_(),this.element_.classList.add(this.CssClasses_.IS_UPGRADED),e&&this.element_.classList.add(this.CssClasses_.IS_INVALID),this.input_.hasAttribute("autofocus")&&(this.element_.focus(),this.checkFocus())}},s.register({constructor:L,classAsString:"MaterialTextfield",cssClass:"mdl-js-textfield",widget:!0});var I=function(e){this.element_=e,this.init()};window.MaterialTooltip=I,I.prototype.Constant_={},I.prototype.CssClasses_={IS_ACTIVE:"is-active",BOTTOM:"mdl-tooltip--bottom",LEFT:"mdl-tooltip--left",RIGHT:"mdl-tooltip--right",TOP:"mdl-tooltip--top"},I.prototype.handleMouseEnter_=function(e){var t=e.target.getBoundingClientRect(),s=t.left+t.width/2,i=t.top+t.height/2,n=-1*(this.element_.offsetWidth/2),a=-1*(this.element_.offsetHeight/2);this.element_.classList.contains(this.CssClasses_.LEFT)||this.element_.classList.contains(this.CssClasses_.RIGHT)?(s=t.width/2,i+a<0?(this.element_.style.top="0",this.element_.style.marginTop="0"):(this.element_.style.top=i+"px",this.element_.style.marginTop=a+"px")):s+n<0?(this.element_.style.left="0",this.element_.style.marginLeft="0"):(this.element_.style.left=s+"px",this.element_.style.marginLeft=n+"px"),this.element_.classList.contains(this.CssClasses_.TOP)?this.element_.style.top=t.top-this.element_.offsetHeight-10+"px":this.element_.classList.contains(this.CssClasses_.RIGHT)?this.element_.style.left=t.left+t.width+10+"px":this.element_.classList.contains(this.CssClasses_.LEFT)?this.element_.style.left=t.left-this.element_.offsetWidth-10+"px":this.element_.style.top=t.top+t.height+10+"px",this.element_.classList.add(this.CssClasses_.IS_ACTIVE)},I.prototype.hideTooltip_=function(){this.element_.classList.remove(this.CssClasses_.IS_ACTIVE)},I.prototype.init=function(){if(this.element_){var e=this.element_.getAttribute("for")||this.element_.getAttribute("data-mdl-for");e&&(this.forElement_=document.getElementById(e)),this.forElement_&&(this.forElement_.hasAttribute("tabindex")||this.forElement_.setAttribute("tabindex","0"),this.boundMouseEnterHandler=this.handleMouseEnter_.bind(this),this.boundMouseLeaveAndScrollHandler=this.hideTooltip_.bind(this),this.forElement_.addEventListener("mouseenter",this.boundMouseEnterHandler,!1),this.forElement_.addEventListener("touchend",this.boundMouseEnterHandler,!1),this.forElement_.addEventListener("mouseleave",this.boundMouseLeaveAndScrollHandler,!1),window.addEventListener("scroll",this.boundMouseLeaveAndScrollHandler,!0),window.addEventListener("touchstart",this.boundMouseLeaveAndScrollHandler))}},s.register({constructor:I,classAsString:"MaterialTooltip",cssClass:"mdl-tooltip"});var f=function(e){this.element_=e,this.init()};window.MaterialLayout=f,f.prototype.Constant_={MAX_WIDTH:"(max-width: 1024px)",TAB_SCROLL_PIXELS:100,RESIZE_TIMEOUT:100,MENU_ICON:"&#xE5D2;",CHEVRON_LEFT:"chevron_left",CHEVRON_RIGHT:"chevron_right"},f.prototype.Keycodes_={ENTER:13,ESCAPE:27,SPACE:32},f.prototype.Mode_={STANDARD:0,SEAMED:1,WATERFALL:2,SCROLL:3},f.prototype.CssClasses_={CONTAINER:"mdl-layout__container",HEADER:"mdl-layout__header",DRAWER:"mdl-layout__drawer",CONTENT:"mdl-layout__content",DRAWER_BTN:"mdl-layout__drawer-button",ICON:"material-icons",JS_RIPPLE_EFFECT:"mdl_js_ripple_effect",RIPPLE_CONTAINER:"mdl-layout__tab-ripple-container",RIPPLE:"mdl-ripple",RIPPLE_IGNORE_EVENTS:"mdl_js_ripple_effect--ignore-events",HEADER_SEAMED:"mdl-layout__header--seamed",HEADER_WATERFALL:"mdl-layout__header--waterfall",HEADER_SCROLL:"mdl-layout__header--scroll",FIXED_HEADER:"mdl-layout--fixed-header",OBFUSCATOR:"mdl-layout__obfuscator",TAB_BAR:"mdl-layout__tab-bar",TAB_CONTAINER:"mdl-layout__tab-bar-container",TAB:"mdl-layout__tab",TAB_BAR_BUTTON:"mdl-layout__tab-bar-button",TAB_BAR_LEFT_BUTTON:"mdl-layout__tab-bar-left-button",TAB_BAR_RIGHT_BUTTON:"mdl-layout__tab-bar-right-button",TAB_MANUAL_SWITCH:"mdl-layout__tab-manual-switch",PANEL:"mdl-layout__tab-panel",HAS_DRAWER:"has-drawer",HAS_TABS:"has-tabs",HAS_SCROLLING_HEADER:"has-scrolling-header",CASTING_SHADOW:"is-casting-shadow",IS_COMPACT:"is-compact",IS_SMALL_SCREEN:"is-small-screen",IS_DRAWER_OPEN:"is-visible",IS_ACTIVE:"is-active",IS_UPGRADED:"is-upgraded",IS_ANIMATING:"is-animating",ON_LARGE_SCREEN:"mdl-layout--large-screen-only",ON_SMALL_SCREEN:"mdl-layout--small-screen-only"},f.prototype.contentScrollHandler_=function(){if(!this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)){var e=!this.element_.classList.contains(this.CssClasses_.IS_SMALL_SCREEN)||this.element_.classList.contains(this.CssClasses_.FIXED_HEADER);this.content_.scrollTop>0&&!this.header_.classList.contains(this.CssClasses_.IS_COMPACT)?(this.header_.classList.add(this.CssClasses_.CASTING_SHADOW),this.header_.classList.add(this.CssClasses_.IS_COMPACT),e&&this.header_.classList.add(this.CssClasses_.IS_ANIMATING)):this.content_.scrollTop<=0&&this.header_.classList.contains(this.CssClasses_.IS_COMPACT)&&(this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW),this.header_.classList.remove(this.CssClasses_.IS_COMPACT),e&&this.header_.classList.add(this.CssClasses_.IS_ANIMATING))}},f.prototype.keyboardEventHandler_=function(e){e.keyCode===this.Keycodes_.ESCAPE&&this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)&&this.toggleDrawer()},f.prototype.screenSizeHandler_=function(){this.screenSizeMediaQuery_.matches?this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN):(this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN),this.drawer_&&(this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN),this.obfuscator_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN)))},f.prototype.drawerToggleHandler_=function(e){if(e&&"keydown"===e.type){if(e.keyCode!==this.Keycodes_.SPACE&&e.keyCode!==this.Keycodes_.ENTER)return;e.preventDefault()}this.toggleDrawer()},f.prototype.headerTransitionEndHandler_=function(){this.header_.classList.remove(this.CssClasses_.IS_ANIMATING)},f.prototype.headerClickHandler_=function(){this.header_.classList.contains(this.CssClasses_.IS_COMPACT)&&(this.header_.classList.remove(this.CssClasses_.IS_COMPACT),this.header_.classList.add(this.CssClasses_.IS_ANIMATING))},f.prototype.resetTabState_=function(e){for(var t=0;t<e.length;t++)e[t].classList.remove(this.CssClasses_.IS_ACTIVE)},f.prototype.resetPanelState_=function(e){for(var t=0;t<e.length;t++)e[t].classList.remove(this.CssClasses_.IS_ACTIVE)},f.prototype.toggleDrawer=function(){var e=this.element_.querySelector("."+this.CssClasses_.DRAWER_BTN);this.drawer_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN),this.obfuscator_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN),this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)?(this.drawer_.setAttribute("aria-hidden","false"),e.setAttribute("aria-expanded","true")):(this.drawer_.setAttribute("aria-hidden","true"),e.setAttribute("aria-expanded","false"))},f.prototype.toggleDrawer=f.prototype.toggleDrawer,f.prototype.init=function(){if(this.element_){var e=document.createElement("div");e.classList.add(this.CssClasses_.CONTAINER);var s=this.element_.querySelector(":focus");this.element_.parentElement.insertBefore(e,this.element_),this.element_.parentElement.removeChild(this.element_),e.appendChild(this.element_),s&&s.focus();for(var i=this.element_.childNodes,n=i.length,a=0;a<n;a++){var l=i[a];l.classList&&l.classList.contains(this.CssClasses_.HEADER)&&(this.header_=l),l.classList&&l.classList.contains(this.CssClasses_.DRAWER)&&(this.drawer_=l),l.classList&&l.classList.contains(this.CssClasses_.CONTENT)&&(this.content_=l)}window.addEventListener("pageshow",function(e){e.persisted&&(this.element_.style.overflowY="hidden",requestAnimationFrame(function(){this.element_.style.overflowY=""}.bind(this)))}.bind(this),!1),this.header_&&(this.tabBar_=this.header_.querySelector("."+this.CssClasses_.TAB_BAR));var o=this.Mode_.STANDARD;if(this.header_&&(this.header_.classList.contains(this.CssClasses_.HEADER_SEAMED)?o=this.Mode_.SEAMED:this.header_.classList.contains(this.CssClasses_.HEADER_WATERFALL)?(o=this.Mode_.WATERFALL,this.header_.addEventListener("transitionend",this.headerTransitionEndHandler_.bind(this)),this.header_.addEventListener("click",this.headerClickHandler_.bind(this))):this.header_.classList.contains(this.CssClasses_.HEADER_SCROLL)&&(o=this.Mode_.SCROLL,e.classList.add(this.CssClasses_.HAS_SCROLLING_HEADER)),o===this.Mode_.STANDARD?(this.header_.classList.add(this.CssClasses_.CASTING_SHADOW),this.tabBar_&&this.tabBar_.classList.add(this.CssClasses_.CASTING_SHADOW)):o===this.Mode_.SEAMED||o===this.Mode_.SCROLL?(this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW),this.tabBar_&&this.tabBar_.classList.remove(this.CssClasses_.CASTING_SHADOW)):o===this.Mode_.WATERFALL&&(this.content_.addEventListener("scroll",this.contentScrollHandler_.bind(this)),this.contentScrollHandler_())),this.drawer_){var r=this.element_.querySelector("."+this.CssClasses_.DRAWER_BTN);if(!r){r=document.createElement("div"),r.setAttribute("aria-expanded","false"),r.setAttribute("role","button"),r.setAttribute("tabindex","0"),r.classList.add(this.CssClasses_.DRAWER_BTN);var _=document.createElement("i");_.classList.add(this.CssClasses_.ICON),_.innerHTML=this.Constant_.MENU_ICON,r.appendChild(_)}this.drawer_.classList.contains(this.CssClasses_.ON_LARGE_SCREEN)?r.classList.add(this.CssClasses_.ON_LARGE_SCREEN):this.drawer_.classList.contains(this.CssClasses_.ON_SMALL_SCREEN)&&r.classList.add(this.CssClasses_.ON_SMALL_SCREEN),r.addEventListener("click",this.drawerToggleHandler_.bind(this)),r.addEventListener("keydown",this.drawerToggleHandler_.bind(this)),this.element_.classList.add(this.CssClasses_.HAS_DRAWER),this.element_.classList.contains(this.CssClasses_.FIXED_HEADER)?this.header_.insertBefore(r,this.header_.firstChild):this.element_.insertBefore(r,this.content_);var d=document.createElement("div");d.classList.add(this.CssClasses_.OBFUSCATOR),this.element_.appendChild(d),d.addEventListener("click",this.drawerToggleHandler_.bind(this)),this.obfuscator_=d,this.drawer_.addEventListener("keydown",this.keyboardEventHandler_.bind(this)),this.drawer_.setAttribute("aria-hidden","true")}if(this.screenSizeMediaQuery_=window.matchMedia(this.Constant_.MAX_WIDTH),this.screenSizeMediaQuery_.addListener(this.screenSizeHandler_.bind(this)),this.screenSizeHandler_(),this.header_&&this.tabBar_){this.element_.classList.add(this.CssClasses_.HAS_TABS);var h=document.createElement("div");h.classList.add(this.CssClasses_.TAB_CONTAINER),this.header_.insertBefore(h,this.tabBar_),this.header_.removeChild(this.tabBar_);var c=document.createElement("div");c.classList.add(this.CssClasses_.TAB_BAR_BUTTON),c.classList.add(this.CssClasses_.TAB_BAR_LEFT_BUTTON);var p=document.createElement("i");p.classList.add(this.CssClasses_.ICON),p.textContent=this.Constant_.CHEVRON_LEFT,c.appendChild(p),c.addEventListener("click",function(){this.tabBar_.scrollLeft-=this.Constant_.TAB_SCROLL_PIXELS}.bind(this));var C=document.createElement("div");C.classList.add(this.CssClasses_.TAB_BAR_BUTTON),C.classList.add(this.CssClasses_.TAB_BAR_RIGHT_BUTTON);var u=document.createElement("i");u.classList.add(this.CssClasses_.ICON),u.textContent=this.Constant_.CHEVRON_RIGHT,C.appendChild(u),C.addEventListener("click",function(){this.tabBar_.scrollLeft+=this.Constant_.TAB_SCROLL_PIXELS}.bind(this)),h.appendChild(c),h.appendChild(this.tabBar_),h.appendChild(C);var E=function(){this.tabBar_.scrollLeft>0?c.classList.add(this.CssClasses_.IS_ACTIVE):c.classList.remove(this.CssClasses_.IS_ACTIVE),this.tabBar_.scrollLeft<this.tabBar_.scrollWidth-this.tabBar_.offsetWidth?C.classList.add(this.CssClasses_.IS_ACTIVE):C.classList.remove(this.CssClasses_.IS_ACTIVE)}.bind(this);this.tabBar_.addEventListener("scroll",E),E();var m=function(){this.resizeTimeoutId_&&clearTimeout(this.resizeTimeoutId_),this.resizeTimeoutId_=setTimeout(function(){E(),this.resizeTimeoutId_=null}.bind(this),this.Constant_.RESIZE_TIMEOUT)}.bind(this);window.addEventListener("resize",m),this.tabBar_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)&&this.tabBar_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);for(var L=this.tabBar_.querySelectorAll("."+this.CssClasses_.TAB),I=this.content_.querySelectorAll("."+this.CssClasses_.PANEL),f=0;f<L.length;f++)new t(L[f],L,I,this)}this.element_.classList.add(this.CssClasses_.IS_UPGRADED)}},window.MaterialLayoutTab=t,s.register({constructor:f,classAsString:"MaterialLayout",cssClass:"mdl-js-layout"});var b=function(e){this.element_=e,this.init()};window.MaterialDataTable=b,b.prototype.Constant_={},b.prototype.CssClasses_={DATA_TABLE:"mdl-data-table",SELECTABLE:"mdl-data-table--selectable",SELECT_ELEMENT:"mdl-data-table__select",IS_SELECTED:"is-selected",IS_UPGRADED:"is-upgraded"},b.prototype.selectRow_=function(e,t,s){return t?function(){e.checked?t.classList.add(this.CssClasses_.IS_SELECTED):t.classList.remove(this.CssClasses_.IS_SELECTED)}.bind(this):s?function(){var t,i;if(e.checked)for(t=0;t<s.length;t++)i=s[t].querySelector("td").querySelector(".mdl-checkbox"),i.MaterialCheckbox.check(),s[t].classList.add(this.CssClasses_.IS_SELECTED);else for(t=0;t<s.length;t++)i=s[t].querySelector("td").querySelector(".mdl-checkbox"),i.MaterialCheckbox.uncheck(),s[t].classList.remove(this.CssClasses_.IS_SELECTED)}.bind(this):void 0},b.prototype.createCheckbox_=function(e,t){var i=document.createElement("label"),n=["mdl-checkbox","mdl-js-checkbox","mdl_js_ripple_effect",this.CssClasses_.SELECT_ELEMENT];i.className=n.join(" ");var a=document.createElement("input");return a.type="checkbox",a.classList.add("mdl-checkbox__input"),e?(a.checked=e.classList.contains(this.CssClasses_.IS_SELECTED),a.addEventListener("change",this.selectRow_(a,e))):t&&a.addEventListener("change",this.selectRow_(a,null,t)),i.appendChild(a),s.upgradeElement(i,"MaterialCheckbox"),i},b.prototype.init=function(){if(this.element_){var e=this.element_.querySelector("th"),t=Array.prototype.slice.call(this.element_.querySelectorAll("tbody tr")),s=Array.prototype.slice.call(this.element_.querySelectorAll("tfoot tr")),i=t.concat(s);if(this.element_.classList.contains(this.CssClasses_.SELECTABLE)){var n=document.createElement("th"),a=this.createCheckbox_(null,i);n.appendChild(a),e.parentElement.insertBefore(n,e);for(var l=0;l<i.length;l++){var o=i[l].querySelector("td");if(o){var r=document.createElement("td");if("TBODY"===i[l].parentNode.nodeName.toUpperCase()){var _=this.createCheckbox_(i[l]);r.appendChild(_)}i[l].insertBefore(r,o)}}this.element_.classList.add(this.CssClasses_.IS_UPGRADED)}}},s.register({constructor:b,classAsString:"MaterialDataTable",cssClass:"mdl-js-data-table"});var S=function(e){this.element_=e,this.init()};window.MaterialRipple=S,S.prototype.Constant_={INITIAL_SCALE:"scale(0.0001, 0.0001)",INITIAL_SIZE:"1px",INITIAL_OPACITY:"0.4",FINAL_OPACITY:"0",FINAL_SCALE:""},S.prototype.CssClasses_={RIPPLE_CENTER:"mdl-ripple--center",RIPPLE_EFFECT_IGNORE_EVENTS:"mdl_js_ripple_effect--ignore-events",RIPPLE:"mdl-ripple",IS_ANIMATING:"is-animating",IS_VISIBLE:"is-visible"},S.prototype.downHandler_=function(e){if(!this.rippleElement_.style.width&&!this.rippleElement_.style.height){var t=this.element_.getBoundingClientRect();this.boundHeight=t.height,this.boundWidth=t.width,this.rippleSize_=2*Math.sqrt(t.width*t.width+t.height*t.height)+2,this.rippleElement_.style.width=this.rippleSize_+"px",this.rippleElement_.style.height=this.rippleSize_+"px"}if(this.rippleElement_.classList.add(this.CssClasses_.IS_VISIBLE),"mousedown"===e.type&&this.ignoringMouseDown_)this.ignoringMouseDown_=!1;else{"touchstart"===e.type&&(this.ignoringMouseDown_=!0);var s=this.getFrameCount();if(s>0)return;this.setFrameCount(1);var i,n,a=e.currentTarget.getBoundingClientRect();if(0===e.clientX&&0===e.clientY)i=Math.round(a.width/2),n=Math.round(a.height/2);else{var l=void 0!==e.clientX?e.clientX:e.touches[0].clientX,o=void 0!==e.clientY?e.clientY:e.touches[0].clientY;i=Math.round(l-a.left),n=Math.round(o-a.top)}this.setRippleXY(i,n),this.setRippleStyles(!0),window.requestAnimationFrame(this.animFrameHandler.bind(this))}},S.prototype.upHandler_=function(e){e&&2!==e.detail&&window.setTimeout(function(){this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE)}.bind(this),0)},S.prototype.init=function(){if(this.element_){var e=this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)||(this.rippleElement_=this.element_.querySelector("."+this.CssClasses_.RIPPLE),this.frameCount_=0,this.rippleSize_=0,this.x_=0,this.y_=0,this.ignoringMouseDown_=!1,this.boundDownHandler=this.downHandler_.bind(this),this.element_.addEventListener("mousedown",this.boundDownHandler),this.element_.addEventListener("touchstart",this.boundDownHandler),this.boundUpHandler=this.upHandler_.bind(this),this.element_.addEventListener("mouseup",this.boundUpHandler),this.element_.addEventListener("mouseleave",this.boundUpHandler),this.element_.addEventListener("touchend",this.boundUpHandler),this.element_.addEventListener("blur",this.boundUpHandler),this.getFrameCount=function(){return this.frameCount_},this.setFrameCount=function(e){this.frameCount_=e},this.getRippleElement=function(){return this.rippleElement_},this.setRippleXY=function(e,t){this.x_=e,this.y_=t},this.setRippleStyles=function(t){if(null!==this.rippleElement_){var s,i,n,a="translate("+this.x_+"px, "+this.y_+"px)";t?(i=this.Constant_.INITIAL_SCALE,n=this.Constant_.INITIAL_SIZE):(i=this.Constant_.FINAL_SCALE,n=this.rippleSize_+"px",e&&(a="translate("+this.boundWidth/2+"px, "+this.boundHeight/2+"px)")),s="translate(-50%, -50%) "+a+i,this.rippleElement_.style.webkitTransform=s,this.rippleElement_.style.msTransform=s,this.rippleElement_.style.transform=s,t?this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING):this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING)}},this.animFrameHandler=function(){this.frameCount_-- >0?window.requestAnimationFrame(this.animFrameHandler.bind(this)):this.setRippleStyles(!1)})}},s.register({constructor:S,classAsString:"MaterialRipple",cssClass:"mdl_js_ripple_effect",widget:!1})}();
var animations;$.getJSON("/workpadentry/workpadentry_animate/animations",function(data){animations=data});const animateElement=(elementSelector,animation,prefix="animate__")=>new Promise((resolve,reject)=>{const animationName=`${prefix}${animation}`;const node=document.querySelector(elementSelector);node.classList.add(`${prefix}animated`,animationName);function handleAnimationEnd(event){event.stopPropagation();node.classList.remove(`${prefix}animated`,animationName);resolve("Animation ended")}node.addEventListener("animationend",handleAnimationEnd,{once:true})});function animateWorkpadEntry(direction){direction=typeof direction!=="undefined"?direction:"in";var $resultDiv=$(this);var workpadEntryId=$resultDiv.data("id");var workpadEntry=workpadEntries[workpadEntryId];$resultDiv.removeClass("animating-in");if(workpadEntry["animate_event"]!=="narrate"){$resultDiv.css("animation-delay",workpadEntry.animate_delay+"s")}$resultDiv.addClass(workpadEntry.animate_speed?"animate__"+workpadEntry.animate_speed:"");return animateElement("#"+$resultDiv.attr("id"),animations[workpadEntry.animation][direction]).then(function(){$resultDiv.addClass("animated-"+direction)})}var narrationEntries;function animateWorkpadEntries(currentPage,event){if(isLoading()){return Promise.resolve()}narrationEntries=[];var promises=[];getAnimatedElementsByPage(currentPage).each(function(){var $resultDiv=$(this);var repeat=$resultDiv.data("animate-repeat");if(typeof $resultDiv.attr("id")==="undefined"||$resultDiv.attr("id").indexOf(PF5_PREFIX)===0)return;var workpadEntry=workpadEntries[$resultDiv.data("id")];if(workpadEntry&&workpadEntry["animate_event"]){if(workpadEntry["animate_event"].indexOf(event)>=0){var direction=event==="close"||repeat===-1?"out":"in";promises.push(animateWorkpadEntry.call(this,direction))}else if(workpadEntry["animate_event"]==="narrate"){narrationEntries.push($resultDiv)}}});var $narrationObjects=$(".narration-object");if(narrationEntries.length&&$narrationObjects.length){$narrationObjects.bind("timeupdate",function(event){var narrationObject=this;narrationEntries.map(function($resultDiv){var workpadEntry=workpadEntries[$resultDiv.data("id")];if(Math.floor(narrationObject.currentTime)===+workpadEntry.animate_delay){animateWorkpadEntry.call($resultDiv.get(0),$resultDiv.data("animation")==="hinge"?"out":"in")}})})}return Promise.all(promises)}function animateNarrationEntries(event){console.log("animateNarrationEntries: ",event)}function animateWorkpadEntryAddEvents(){$(document).on("click",".animate-click",function(){var repeat=$(this).data("animate-repeat");animateWorkpadEntry.call(this,repeat===-1?"out":"in")});$(document).on("mouseenter",".animate-hover",function(){var repeat=$(this).data("animate-repeat");animateWorkpadEntry.call(this,repeat===-1?"out":"in")})}function hideAnimatingIn(page){if(editMode())return;getAnimatedElementsByPage(page).each(function(){if(this.className.match(/animate-open|narrate/)){if($(this).data("animation")!=="hinge"){$(this).addClass("animating-in")}}})}function getAnimatedElementsByPage(page){if(isTrifold()||isGatefold()){return $(".resultDiv.animate")}else{return $(".resultDiv.animate.page-"+page+(isPageSpread()?",.resultDiv.animate.page-"+(+page-1):""))}}
function workpadSearch(){$(".action-workpad-search-noresults").hide();$(".action-workpad-searchresult").remove();var searchPhrase=$("input[name=workpadSearch]").val();if(!searchPhrase.length){return false}$(".action-workpad-search-spinner").show();$.ajax({url:"/workpad/workpad_public/search",data:{workpad_key:W["workpad_key"],query:searchPhrase}}).then(function(response){if(response.status==="ok"){var matchedPages=response.data;if(matchedPages.length){loadPages(matchedPages).then(function(){renderMatchedPages(matchedPages)})}else{$(".action-workpad-search-spinner").hide();$(".action-workpad-search-noresults").show()}}else{modalToast(response.message)}});return false}function renderMatchedPages(matchedPages){$(".action-workpad-search-spinner").hide();matchedPages.map(function(pageNumber){var $page=$(".pageDiv.page-"+pageNumber);renderSearchResultsByPage($page)})}function renderSearchResultsByPage($page){var pageNumber=+$page.attr("page");var $resultNode=$("<div class='mdl-grid mdl-grid--100 mdl-cell--flex-row-reverse action-workpad-searchresult workpad-searchresult-list toc-row' data-search_result_page='"+pageNumber+"'><div class='mdl-cell mdl-cell--flex mdl-cell--flex-between mdl-cell--middle mdl-cell--3-col mdl-cell--1-col-phone'><p class='mdl-cell--middle' style='margin: 0;'>pg</p><h6>"+(1+pageNumber)+"</h6></div></div>");var $resultNodePreview=$("<div class='mdl-cell mdl-cell--middle mdl-cell--9-col  mdl-cell--3-col-phone preview-bookletsearchresults'></div>");$resultNode.appendTo($(".action-workpad-searchresults"));$resultNodePreview.appendTo($resultNode);$page.workpadPagePreview($resultNodePreview,true)}$(document).on("click",".action-workpad-search",function(){return workpadSearch()});$(document).on("click",".action-workpad-searchresult",function(e){e.preventDefault();var pageNumber=$(this).data("search_result_page");gotoPage(pageNumber,true);if(MOBILE){modalClose()}return false});
function getNarrateCurrentTime($pageDiv){if(parseFloat($pageDiv.data("narration_start_time"))>0)return parseFloat($pageDiv.data("narration_start_time"));return 0}function pauseNarratePosition(){var page=getNarrationPage();var $pageDiv=pageDiv(page);var $audioPlayer=$("#simplebooklet-narration_audio-player");var $videoPlayer=$("#simplebooklet-narration_video-player");var currentTime=0;var duration;if($pageDiv.data("narration_is_video")==1&&typeof $videoPlayer[0]!=="undefined"){currentTime=$videoPlayer[0].currentTime;duration=$videoPlayer[0].duration}else if(typeof $audioPlayer[0]!=="undefined"){currentTime=$audioPlayer[0].currentTime;duration=$audioPlayer[0].duration}if(typeof duration==="number")currentTime=duration-currentTime<3?0:currentTime;currentTime=currentTime>=0&&currentTime<120?currentTime:0;$pageDiv.data("narration_start_time",currentTime)}function audioPlayerPause($audioPlayer,$videoPlayer){if(typeof $audioPlayer[0]!=="undefined")$audioPlayer[0].pause();if(typeof $videoPlayer[0]!=="undefined")$videoPlayer[0].pause()}function removePageNarration($audioPlayer,$videoPlayer){audioPlayerPause($audioPlayer,$videoPlayer);$audioPlayer.find("source").remove();$videoPlayer.find("source").remove();$("body").removeClass("state-chrome-page-narration-audio-on state-chrome-page-narration-video-on");return false}function setNarrationPlayedOnce($pageDiv){if(+$pageDiv.data("autoplay_once")){$pageDiv.data("autoplay",0)}}function narrationIsMinimized(){return $("body").hasClass("state-page-narration-minimized")}function narrationDoAutoPlay($pageDiv){return+$pageDiv.data("autoplay")===1&&!narrationIsMinimized()&&!editMode()&&!designMode()&&!narrateMode()}function loadAutoPlay($pageDiv,$player){if($global.currentPage===0&&!MOBILE&&$("body").hasClass("feedback-active")){if(!$(".narration-controls-container").hasClass("narration-expanded-on-autoplay")){$(".narration-controls-container").addClass("narration-expanded narration-expanded-on-autoplay")}}else{$(".narration-controls-container").removeClass("narration-expanded")}if($("#lead_enterinfo").is(":visible")){if(DEV)console.log("skipping autoplay because leadgate is visible");return}if(narrationDoAutoPlay($pageDiv)){var playerPromise=$player[0].play();playerPromise.then(function(){setNarrationPlayedOnce($pageDiv)}).catch(function(error){console.log("autoplay is not allowed until user has interacted with the doc: ",error)})}return false}$(document).on("click",".action-narration-minimize",function(){$("body").addClass("state-page-narration-minimized");$(".state-minmax-toggle").addClass("action-narration-maximize");pauseNarratePosition();var $audioPlayer=$("#simplebooklet-narration_audio-player");var $videoPlayer=$("#simplebooklet-narration_video-player");audioPlayerPause($audioPlayer,$videoPlayer)});$(document).on("click",".action-narration-maximize",function(){$("body").removeClass("state-page-narration-minimized");$(".action-narration-maximize").removeClass("action-narration-maximize");var $pageDiv=pageDiv(getNarrationPage());var $player=$pageDiv.data("narration_is_video")==1?$("#simplebooklet-narration_video-player"):$("#simplebooklet-narration_audio-player");loadAutoPlay($pageDiv,$player)});function autoPageTurn(){var narrationPage=getNarrationPage();var $pageDiv=pageDiv(narrationPage);if($pageDiv.data("autopageturn")=="1"&&!narrationIsMinimized()&&!designMode()&&!isLastPage()){setTimeout(function(){changePage(1)},500)}}function loadNarrationPlayer($pageDiv,$player){if(typeof $player[0]!=="undefined"){DEV&&console.log("current time is "+getNarrateCurrentTime($pageDiv));$player[0].pause();$player[0].load();$player[0].currentTime=getNarrateCurrentTime($pageDiv);loadAutoPlay($pageDiv,$player)}return false}function activatePageNarration($pageDiv,$audioPlayer,$videoPlayer,narration,isVideo,webp,jpg){var $player=isVideo?$videoPlayer:$audioPlayer;if(isVideo){$("body").removeClass("state-chrome-page-narration-audio-on");if(!$("body").hasClass("state-chrome-page-narration-video-on")){$("body").addClass("state-chrome-page-narration-video-on")}}else{$("body").removeClass("state-chrome-page-narration-video-on");if(!$("body").hasClass("state-chrome-page-narration-audio-on")){$("body").addClass("state-chrome-page-narration-audio-on")}if(webp){$(".action-narrationheadshotpublish-srcsetwebp").attr("srcset",webp);$(".action-narrationheadshotpublish-srcsetjpg").attr("srcset",jpg);$(".action-narrationheadshotpublish-srcjpg").attr("src",jpg);$(".action-narrationheadshot-container").fadeIn()}else{$(".action-narrationheadshot-container").fadeOut()}}if($player.find("source").attr("src")!==narration){var src="<source src='"+narration+"'>";$player.find("source").remove();$player.prepend(src)}audioPlayerPause($audioPlayer,$videoPlayer);loadNarrationPlayer($pageDiv,$player);return false}function getNarrationPage(){return isPageSpread()?getOddPage():$global.currentPage}function getOddPage(){if($global.currentPage%2){return+$global.lastPage===+$global.currentPage?$global.lastPage:$global.currentPage+1}else{return $global.currentPage}}function togglePageNarration(){if(window._phantom){return false}if(editMode()){return false}var $audioPlayer=$("#simplebooklet-narration_audio-player");var $videoPlayer=$("#simplebooklet-narration_video-player");if($audioPlayer===null||typeof $audioPlayer==="undefined"||!$audioPlayer.length){$("body").removeClass("state-chrome-page-narration-audio-on");return false}if($videoPlayer===null||typeof $videoPlayer==="undefined"||!$videoPlayer.length){$("body").removeClass("state-chrome-page-narration-video-on");return false}var narrationPage=getNarrationPage();var $pageDiv=pageDiv(narrationPage);var narration=$pageDiv.data("narration");var isVideo=+$pageDiv.data("narration_is_video")===1;if(!narration){removePageNarration($audioPlayer,$videoPlayer);return false}activatePageNarration($pageDiv,$audioPlayer,$videoPlayer,narration,isVideo,$pageDiv.data("headshot_webp"),$pageDiv.data("headshot_jpg"));return false}function insertPageNarration(data){if(typeof data.narrations==="undefined"||data.narrations.length<=0){return false}var narrations=data.narrations;for(var i=0;i<narrations.length;i++){var $pageDiv=pageDiv(narrations[i].page_number);$pageDiv.data("narration",narrations[i]["url"]);$pageDiv.data("headshot_webp",narrations[i]["headshot_webp"]);$pageDiv.data("headshot_jpg",narrations[i]["headshot_jpg"]);$pageDiv.data("autoplay",+narrations[i]["autoplay"]);$pageDiv.data("autoplay_once",+narrations[i]["autoplay_once"]);$pageDiv.data("autopageturn",+narrations[i]["autopageturn"]);$pageDiv.data("narration_is_video",+narrations[i]["is_video"]);$pageDiv.data("narration_start_time",0);if(narrations[i].page_number==getNarrationPage()){togglePageNarration()}}}function getWorkpadNarrations(){if(editMode())return false;return $.ajax({data:{workpad_key:W["key"],narrate_mode:narrateMode()},url:"/workpad/workpad_narration/get_workpad_narrations",dataType:"json",error:function(e){modalToast("We couldn't retrieve narrations.");console.log("error");console.log(e);return false},success:function(json){if(json.status==="ok"){insertPageNarration(json.data)}else if(json.status==="error"&&json.message){modalToast(json.message)}else{modalToast("We couldn't retrieve narrations at this time.")}return false}})}$(document).on("click",".narration-collapse-button,.narration-expand-button",function(){$(".narration-controls-container").toggleClass("narration-expanded")});
var NARRATION_MAX_FILE_SIZE=11534336;var recordButton;var stopButton;var saveButton;var recorder;var avPlayer;var audioVideoData;var timeManager;var timeLimitSeconds=0;var stopwatchTimer=0;var $recordButton;var $stopButton;var $avPlayer;var videoStreamer;var $videoStreamer;var liveStream;var blurredLiveTrack;var unblurredLiveTrack;var twilioVideoTrack;var twilioBackgroundBlur=false;var audioSource=false;var videoSource=false;var isBlurred=false;var skipRedo=false;var videoWidth=150;var videoHeight=150;var telepromptWindow;var twilioVideoOptions={width:videoWidth,height:videoHeight,frameRate:24};var videoOptions={audioBitsPerSecond:12800,videoBitsPerSecond:1e5,frameRate:15,mimeType:isSafari()?"video/mp4;codecs=avc1":"video/webm;codecs=vp8,opus"};function removeUnblurNode(){$videoStreamer.remove()}function showStreamHidePreview(){$(".action-narrationvideo-previewcontainer").hide();$(".action-narrationvideo-streamcontainer").fadeIn()}function showPreviewHideStream(){$(".action-narrationvideo-streamcontainer").hide();$(".action-narrationvideo-previewcontainer").fadeIn()}$(document).on("click",".action-narrration-blur",function(){removeUnblurNode();showBlurVideo();showStreamHidePreview();isBlurred=true;$(this).addClass("selected");$(".action-narrration-unblur").removeClass("selected")});$(document).on("click",".action-narrration-unblur",function(){unBlurTrack();isBlurred=false;$(this).addClass("selected");$(".action-narrration-blur").removeClass("selected")});$(document).on("click",".action-camera-showeffects",function(){showStreamHidePreview();$(".fx-container").toggle()});function setVideoAttr(){$videoStreamer.attr("id","simplebooklet-videonarrationedit-livestream");$videoStreamer.addClass("narration-video-livestream")}const showBlurVideo=async()=>{var options=twilioVideoOptions;if(videoSource)options.deviceId={exact:videoSource};const videoTrack=await Twilio.Video.createLocalVideoTrack(options);const bg=new Twilio.VideoProcessors.GaussianBlurBackgroundProcessor({assetsPath:"/",maskBlurRadius:10,blurFilterRadius:5});await bg.loadModel();twilioVideoTrack=videoTrack;twilioBackgroundBlur=bg;if($("#action-narration-livestream").find("video").length>=1)$("#action-narration-livestream").empty();document.getElementById("action-narration-livestream").appendChild(videoTrack.attach());$videoStreamer=$("#action-narration-livestream").find("video");setVideoAttr($videoStreamer);if(isBlurred)blurTrack()};function getAudioConstraints(){return{audio:{deviceId:audioSource?{exact:audioSource}:true},video:false,mimeType:"audio/webm"}}function getVideoConstraints(){return{audio:{deviceId:audioSource?{exact:audioSource}:true},video:{deviceId:videoSource?{exact:videoSource}:true,width:{ideal:videoWidth},height:{ideal:videoHeight},aspectRatio:1,frameRate:15},mimeType:"video/webm;codecs=vp8,opus"}}function blurTrack(){twilioVideoTrack.addProcessor(twilioBackgroundBlur);blurredLiveTrack=twilioVideoTrack.processedTrack;unblurredLiveTrack=twilioVideoTrack.mediaStreamTrack;var tracks=liveStream.getVideoTracks();liveStream.removeTrack(tracks[0]);liveStream.addTrack(blurredLiveTrack);setVideoStreamer(liveStream)}function unBlurTrack(){var tracks=liveStream.getVideoTracks();liveStream.removeTrack(tracks[0]);twilioVideoTrack.removeProcessor(twilioBackgroundBlur);liveStream.addTrack(unblurredLiveTrack)}function appendCamera(device,k){var label=device.label||"Camera "+k;var selected=device.deviceId==videoSource?"selected":"";var $option="<option data-state='enabled' value='"+device.deviceId+"' "+selected+">"+label+"</option>";$(".action-camera-select").append($option)}function showCameraAudioSelect(devices){var j=0;var k=0;for(let i=0;i!==devices.length;++i){if(devices[i].kind==="audioinput"){j++;appendMicrophone(devices[i],j)}else if(devices[i].kind==="videoinput"){k++;appendCamera(devices[i],k)}}$(".action-microphone-select").fadeIn();$(".action-camera-select").fadeIn()}$(document).on("change",".action-camera-select",function(){videoSource=$(this).val();var constraints=getVideoConstraints();setUserMedia(constraints,true)});$(document).on("change",".action-microphone-select",function(){audioSource=$(this).val();var isVideo=+$(this).data("is_video")===1;var constraints=isVideo?getVideoConstraints():getAudioConstraints();setUserMedia(constraints,isVideo)});function appendMicrophone(device,j){var label=device.label||"microphone "+j;var selected=device.deviceId==audioSource?"selected":"";var $option="<option data-state='enabled'  value='"+device.deviceId+"' "+selected+">"+label+"</option>";$(".action-microphone-select").append($option)}function showMicrophonesSelect(devices){var j=0;for(let i=0;i!==devices.length;++i){if(devices[i].kind==="audioinput"){j++;appendMicrophone(devices[i],j)}}$(".action-microphone-select").fadeIn()}function showDevices(callback){navigator.mediaDevices.enumerateDevices().then(callback).catch(function(e){console.log("enum Devices error obj");console.log(e)})}$(document).on("click",".action-microphone-displayselect",function(){$(this).hide();showDevices(showMicrophonesSelect)});$(document).on("click",".action-camera-displayselect",function(){$(this).hide();showStreamHidePreview();showDevices(showCameraAudioSelect)});function checkNarrationBrowser(){if(typeof MediaRecorder==="undefined"){modalToast("The narrations play back on all modern browsers, but they must be authored from the Chrome browser.");return false}return true}var meetingModalWasOpen=false;function loadAddNarration(inviteKey,feedbackMode){if(checkNarrationBrowser()){meetingModalWasOpen=meetingModalWasOpen||$("#meeting-comments").is(":visible");modalOpen("narration-audio-invite",{page:getNarrationPage(),invite_key:inviteKey,feedback_mode:feedbackMode?1:0},initAudioRecording,loadNarrationClose)}}function loadAddNarrationVideo(inviteKey,feedbackMode){if(checkNarrationBrowser()){meetingModalWasOpen=meetingModalWasOpen||$("#meeting-comments").is(":visible");modalOpen("narration-video-invite",{page:getNarrationPage(),invite_key:inviteKey,feedback_mode:feedbackMode?1:0},initVideoRecording,loadNarrationClose)}}function loadNarrationClose(){stopPreviewAndStream();if(meetingModalWasOpen&&!$("#narration-video-invite,#narration-audio-invite").is(":visible")){meetingModalWasOpen=false;displayMeetingComments(meetingCommentsShowBottom)}}$(document).on("click",".action-narration-overwrite",function(){$(".action-narration-overwritecontainer").slideUp();$(".action-narration-audiocontainer").fadeIn();$(".action-narration-videocontainer").fadeIn();narrationRedo()});function setCurrentDevices(stream){currentCameraId=stream.getVideoTracks()[0]?stream.getVideoTracks()[0].getCapabilities().deviceId:0;currentMicId=stream.getAudioTracks()[0]?stream.getAudioTracks()[0].getCapabilities().deviceId:0}function setVideoStreamer(stream){liveStream=stream;videoStreamer.srcObject=stream;videoStreamer.onloadedmetadata=e=>{videoStreamer.play()}}function setUserMedia(constraints,forVideo){if(videoSource)constraints.video.deviceId={exact:videoSource};if(audioSource)constraints.audio.deviceId={exact:audioSource};disablePageActions();navigator.mediaDevices.getUserMedia(constraints).then(function(stream){if(!videoSource&&forVideo)videoSource=stream.getVideoTracks()[0].getCapabilities().deviceId;recordButton.disabled=false;if(forVideo)recorder=new MediaRecorder(stream,videoOptions);else recorder=new MediaRecorder(stream);recorder.addEventListener("dataavailable",onRecordingReady);if(forVideo){setVideoStreamer(stream);if(isBlurred||twilioBackgroundBlur){showBlurVideo()}}setCurrentDevices(stream)}).catch(function(e){enablePageActions();if(DEV)console.log("could not getUserMedia e is: ",e);modalToast("Access to your recording device is being blocked, setUserMedia. please check system settings.")}).finally(function(){enablePageActions()})}function initAudioRecording(){stopwatchEnd();stopPreviewAndStream();$(".narration-teleprompt-container").show();timeLimitSeconds=120;$recordButton=$("#simplebooklet-narrationedit-record");$stopButton=$("#simplebooklet-narrationedit-stop");$avPlayer=$("#simplebooklet-narrationedit-audio");recordButton=document.getElementById("simplebooklet-narrationedit-record");stopButton=document.getElementById("simplebooklet-narrationedit-stop");saveButton=document.getElementById("simplebooklet-narrationedit-save");saveButton.disabled=true;avPlayer=document.getElementById("simplebooklet-narrationedit-audio");recordButton.addEventListener("click",startRecordingNarration);stopButton.addEventListener("click",stopRecordingNarration);if(typeof navigator.mediaDevices==="undefined"){modalToast("Access to your recording device is being blocked, navigator.mediaDevices is undefined. please check system settings.");return}var constraints=getAudioConstraints();setUserMedia(constraints,false);console.log("initAudioRecording: $('.action-headshotrtu-uploader').length: ",$(".action-headshotrtu-uploader").length);fileUploadInit(previewAndSaveHeadshotForNarration,$(".action-headshotrtu-uploader"))}function initVideoRecording(){stopwatchEnd();stopPreviewAndStream();$(".narration-teleprompt-container").show();timeLimitSeconds=60;$recordButton=$("#simplebooklet-videonarrationedit-record");$stopButton=$("#simplebooklet-videonarrationedit-stop");$avPlayer=$("#simplebooklet-narrationedit-video");$videoStreamer=$("#simplebooklet-videonarrationedit-livestream");recordButton=document.getElementById("simplebooklet-videonarrationedit-record");stopButton=document.getElementById("simplebooklet-videonarrationedit-stop");saveButton=document.getElementById("simplebooklet-videonarrationedit-save");if(!recordButton||!stopButton||!saveButton){return}saveButton.disabled=true;avPlayer=document.getElementById("simplebooklet-videonarrationedit-video");recordButton.addEventListener("click",startRecordingNarration);stopButton.addEventListener("click",stopRecordingNarration);videoStreamer=document.getElementById("simplebooklet-videonarrationedit-livestream");if(typeof navigator.mediaDevices==="undefined"){modalToast("Access to your recording device is being blocked, please check system settings.");return false}var constraints=getVideoConstraints();setUserMedia(constraints,true);return false}function stopwatchIncrement(){stopwatchTimer++;if(stopwatchTimer>=timeLimitSeconds){stopRecordingNarration()}var countDownSeconds=timeLimitSeconds-stopwatchTimer;var mins=Math.floor(countDownSeconds/60);var secs=countDownSeconds%60;secs=secs<10?"0"+secs.toString():secs;var timer=mins+":"+secs;$(".narration-stopwatch").text(timer)}function stopwatchStart(){stopwatchEnd();stopwatchIncrement();timeManager=setInterval(stopwatchIncrement,1e3)}function stopwatchEnd(){clearInterval(timeManager);stopwatchTimer=0}function unCaptureStop(){$(document).off("keypress",captureStop)}function captureStop(){stopRecordingNarration();unCaptureStop();return true}function start(){$(".video-overlay").fadeOut();stopButton.disabled=false;stopwatchStart();recorder.start();$(".action-narration-record-container").addClass("narration-recording")}function displayCountdown(i){$("body").addClass("countdown").attr("data-countdown",i);if(i>0){setTimeout(function(){displayCountdown(--i)},1e3)}else{$("body").removeClass("countdown");start()}}function disablePageActions(){$("body").addClass("action-recording");$(".tab").addClass("disabled")}function enablePageActions(){$("body").removeClass("action-recording");$(".tab").removeClass("disabled")}function reSet(){showStreamHidePreview();enablePageActions();$(".action-narration-preview-container").hide();$(".narration-current-recording-title").hide();$(".narrationvideo-recording-title").hide();$(".action-narration-record-container").show();$(".narrationvideo-title").show();$(".action-narration-save").hide();$(".action-narration-redo").hide();$(".action-blur-container").fadeIn();$(".action-cameraeffects-container").fadeOut();$(".action-deviceoptions-container").fadeOut();$(".narration-stopwatch").text("")}function disableCameraSelectEffects(){$(".action-camera-displayselect").data("state","disabled");$(".action-camera-select").data("state","disabled")}function enableCameraSelectEffects(){$(".action-camera-displayselect").data("state","enabled");$(".action-camera-select").data("state","enabled")}function startRecordingNarration(){reSet();disablePageActions();recordButton.disabled=true;saveButton.disabled=true;avPlayer.src="";$(".action-headshot-preview").fadeOut();$(".narrationvideo-title").hide();$(".narrationvideo-recording-title").show();displayCountdown(LOCALHOST?3:3);if(typeof telepromptWindow==="object"&&!telepromptWindow.closed){telepromptWindow.focus()}}function stopRecordingNarration(){showPreviewHideStream();if(istelepromptOpen()){telepromptWindow.close()}var $activeTab=$(".narration-modal-tab.active");var $container=$activeTab.length?$activeTab:$("body");$container.find(".action-narration-redo").fadeIn();$container.find(".action-narration-save").fadeIn();enablePageActions();$(".action-narration-preview-container").show();$(".narration-current-recording-title").show();$(".narrationvideo-title").hide();$(".action-headshot-preview").fadeIn();$(".action-narrate-msg").text("Save to add to page");$(".action-narration-record-container").removeClass("narration-recording").hide();recordButton.disabled=false;stopwatchEnd();recorder.stop()}function actionRecording(){return $("body:not(.countdown)",window.opener?window.opener.document:window.document).hasClass("action-recording")}function onRecordingReady(e){audioVideoData=e.data;saveButton.disabled=false;avPlayer.src=URL.createObjectURL(e.data);avPlayer.play()}$(document).on("change",".action-narration-file",function(){$(".action-narration-upload-error").hide();audioVideoData=$(this)[0].files[0];if(audioVideoData.size>=NARRATION_MAX_FILE_SIZE){$(".action-narration-upload-error").text("This file size is "+formatBytes(audioVideoData.size,0)+" and exceeds the maximum size of "+formatBytes(NARRATION_MAX_FILE_SIZE,0)).fadeIn();return false}if($("#narration").length){if(audioVideoData.type.indexOf("video")>=0){$('a[href="#narration-modal-video-tab"]').trigger("click")}else{$('a[href="#narration-modal-audio-tab"]').trigger("click")}}avPlayer.src=URL.createObjectURL(audioVideoData);avPlayer.play();saveButton.disabled=false;showPreviewHideStream();var $activeTab=$(".narration-modal-tab.active");var $container=$activeTab.length?$activeTab:$("body");$container.find(".action-narration-save").fadeIn();$(".action-narration-record").hide();skipRedo=true});function toggleHeadshotForAudioPlayer(toggleOn,json){if(toggleOn){updateNarrationHeadshotSrc(json);$(".action-narrationheadshot-container").fadeIn();$(".action-headshot-preview").fadeIn()}else{$(".action-narrationheadshot-container").empty();$(".action-headshot-preview").fadeOut()}}function updateHeadshotIdNarration(headshotId,toggleOn){var data={workpad_id:W["id"],page:getNarrationPage(),headshot_id:headshotId,headshot_toggle:toggleOn?1:0};return $.ajax({url:"/workpad/workpad_narration/headshot_toggle",type:"POST",data:data}).then(function(response){if(response.status==="ok"){toggleHeadshotForAudioPlayer(toggleOn,response);$(".narrationheadshot-dropdown").fadeOut()}else{modalToast(response.message)}})}$(document).on("change","input[name='headshotSelectNarration']",function(){var headshotId=$("input[name='headshotSelectNarration']:checked").val();$(".action-narration-headshotid").data("headshot_id",headshotId);updateHeadshotIdNarration(headshotId,true)});$(document).on("click",".action-narration-save",function(){stopAudioPreview();saveButton.disabled=true;audioVideoData=typeof audioVideoData!=="undefined"?audioVideoData:$(this).closest(".modal").find(".action-narration-file")[0].files[0];var data=new FormData;var isFeedback=$(this).data("is_feedback");data.append("file",audioVideoData);data.append("workpad_key",W["key"]);data.append("page",getNarrationPage());data.append("is_video",$(this).data("is_video"));data.append("is_feedback",isFeedback);data.append("is_private",$(this).data("is_private"));data.append("invite_key",parseQueryString("invite_key"));data.append("headshot_id",$(".action-narration-headshotid").data("headshot_id"));data.append("headshot_toggle",$(".action-headshot-preview img").length?1:0);$.ajax({url:"/workpad/workpad_narration/upload_narration",data:data,type:"POST",processData:false,contentType:false,beforeSend:ajaxBefore,complete:ajaxComplete,success:function(json){if(json.status==="ok"){if(isFeedback){modalClose();updateFeedbackCount()}else{var $pageDiv=$("#pageDiv_"+getNarrationPage());$pageDiv.data("narration",json.data["url"]+"?ts="+(new Date).getTime()).data("autoplay",json.data["autoplay"]).data("narration_is_video",json.data["is_video"]);if(typeof json.data["headshot_webp"]!=="undefined"){$pageDiv.data("headshot_webp",json.data["headshot_webp"]+"?ts="+(new Date).getTime()).data("headshot_jpg",json.data["headshot_jpp"]+"?ts="+(new Date).getTime())}else{$pageDiv.removeData("headshot_webp headshot_jpg")}togglePageNarration();$(".action-narration-save").fadeOut();$(".action-narrate-msg").text("");if(data.get("invite_key")){modalToast("Your narration has been received and temporarily added to this page for you to preview.",modalClose)}else{modalOpen("narration-save-success",{current_page:$global.currentPage})}}}else{saveButton.disabled=false;var msg=typeof json.message!=="undefined"&&json.message?json.message:"Sorry, we couldn't save that, possibly due to a poor network connection or large file size.";modalToast(msg)}}});return false});function deleteWorkpadNarration(){var $container=$(this).closest(".action-workpad-narration-submission-container");var workpadNarrationId=$(this).data("workpad-narration-id");$.ajax({url:"/workpad/workpad_narration/delete_page_narration",data:{workpad_key:W["key"],workpad_narration_id:workpadNarrationId},beforeSend:ajaxBefore,complete:ajaxComplete,success:function(json){if(json.status==="ok"){if(json.data.is_invite){$container.fadeOut(300,function(){$(this).remove()});if(typeof inviteSubmissionsPerPage==="object"){inviteSubmissionsPerPage.map(function(pageCounts){if(pageCounts.page===$global.currentPage){pageCounts.count--}});updateInviteBadgeCount()}}else{var $pageDiv=pageDiv(getNarrationPage());$pageDiv.removeData("narration autoplay autopageturn narration_is_video");togglePageNarration();modalToast(json.message,modalClose)}}else{var msg=typeof json.message!=="undefined"&&json.message?json.message:"Sorry, we couldn't remove the narration.";modalToast(msg)}}})}$(document).on("click",".action-narration-delete",deleteWorkpadNarration);function stopPreviewAndStream(){stopAudioPreview();if(typeof recorder==="object"&&recorder.stream){recorder.stream.getTracks().forEach(function(track){track.stop()})}if(typeof videoStreamer==="object"&&videoStreamer.srcObject){videoStreamer.srcObject.getTracks().forEach(function(track){track.stop()})}return false}function stopAudioPreview(){if(typeof avPlayer!=="undefined")avPlayer.pause();if($avPlayer==null||typeof $avPlayer==="undefined"||!$avPlayer.length){return false}if(typeof $avPlayer[0]!=="undefined"){$avPlayer[0].pause()}return false}function toggleAutoplayOnce(){if($(".action-narration-autoplay-set").is(":checked"))$(".action-autoplayonce-toggle").fadeIn();else $(".action-autoplayonce-toggle").fadeOut()}function updateAutoPlaySettings(autoPlay,autoPlayOnce,autoPageturn){$.ajax({url:"/workpad/workpad_narration/update_autoplay",data:{workpad_id:W["id"],page:getNarrationPage(),autoPlay:autoPlay,autoPlayOnce:autoPlayOnce,autoPageturn:autoPageturn},complete:ajaxComplete,success:function(json){if(json.status==="ok"){toggleAutoplayOnce();return false}else{var msg=typeof json.message!=="undefined"&&json.message?json.message:"Sorry, we couldn't save that option.";modalToast(msg)}}});return false}$(document).on("change",".action-narration-autoplay-set",function(){var autoPlay=$(this).is(":checked")?1:0;$(this).closest(".modal").find("input[name=narrationAutoplayOnce]").prop("checked",autoPlay);var autoPageturn=$(this).closest(".modal").find("input[name=narrationAutopageturn]").is(":checked")?1:0;updateAutoPlaySettings(autoPlay,autoPlay,autoPageturn)});$(document).on("change",".action-narration-autopageturn-set, .action-narration-autoplayonce-set",function(){var autoPlay=$(this).closest(".modal").find("input[name=narrationAutoplay]").is(":checked")?1:0;var autoPlayOnce=$(this).closest(".modal").find("input[name=narrationAutoplayOnce]").is(":checked")?1:0;var autoPageturn=$(this).closest(".modal").find("input[name=narrationAutopageturn]").is(":checked")?1:0;updateAutoPlaySettings(autoPlay,autoPlayOnce,autoPageturn)});function narrationRedo(){if(skipRedo){skipRedo=false;return}reSet();$(".action-cameraeffects-container").fadeIn();$(".action-deviceoptions-container").fadeIn();$recordButton.fadeIn()}$(document).on("click",".action-narration-redo",function(){narrationRedo()});$(document).on("click",".action-set-workpad-narration-invite",workpadNarrationInviteCreate);function workpadNarrationInviteCreate(){var $form=$(this).closest("form");var workpadNarrationInviteId=$form.find("input[name=workpad_narration_invite_id]").val();var message=$form.find("*[name=message]").val();var allPages=$form.find("input[name=all_pages]").is(":checked");return $.ajax({url:"/workpad/workpad_narration_invite/set",data:{workpad_narration_invite_id:workpadNarrationInviteId,workpad_id:W["id"],page:$global.currentPage,message:message,all_pages:allPages}}).then(function(response){if(response.status==="ok"){$("#narration-invite-button").trigger("click")}else{modalToast(response.message)}})}$(document).on("click",".action-cancel-workpad-narration-invite",function(){var button=this;modalToastConfirm("Anyone with this invite link will no longer be able to submit narrations.",function(){workpadNarrationInviteCancel.call(button)},true)});function workpadNarrationInviteCancel(){var $form=$(this).closest("form");var workpadNarrationInviteId=$form.find("input[name=workpad_narration_invite_id]").val();return $.ajax({url:"/workpad/workpad_narration_invite/cancel",data:{workpad_narration_invite_id:workpadNarrationInviteId}}).then(function(response){if(response.status==="ok"){$("#narration-invite-button").trigger("click")}else{modalToast(response.message)}})}$(document).on("click",".action-narration-invite-activate",workpadNarrationInviteActivate);function workpadNarrationInviteActivate(){var workpadNarrationId=$(this).data("workpad-narration-id");return $.ajax({url:"/workpad/workpad_narration/activate_invite",data:{workpad_narration_id:workpadNarrationId,workpad_id:W["id"]}}).then(function(response){if(response.status==="ok"){getWorkpadNarrations()}modalToast(response.message)})}$(document).on("click",".narration-return-to-invite",function(){var inviteKey=$(this).data("invite-key");gotoPage($(this).data("page"),true);modalOpen("narration-invite-welcome",{invite_key:inviteKey})});function openInviteModalByPage(page){$(document).on("rdp-loaded",function(){gotoPage(page,true);if(+page===0){modalOpen("narration-add-invite",{show_submissions:true})}else{$(document).one("change-page-complete",function(){modalOpen("narration-add-invite",{show_submissions:true})})}})}function workpadNarrationInviteToggleAllPages(){var $input=$(this);var $form=$input.closest("form");var workpadNarrationInviteId=$form.find("input[name=workpad_narration_invite_id]").val();if(!workpadNarrationInviteId){return}return $.ajax({url:"/workpad/workpad_narration_invite/all_pages",data:{workpad_narration_invite_id:workpadNarrationInviteId,all_pages:$input.is(":checked")}}).then(function(response){if(response.status==="ok"){}else{modalToast(response.message)}})}var displayCommentsOnLoadDone=false;$(document).on("change-page-complete",function(){var displayCommentsOnLoad=parseQueryString("pid")==="meeting-comments"&&!displayCommentsOnLoadDone;updateInviteBadgeCount();if($("#meeting-comments").is(":visible")||displayCommentsOnLoad){displayCommentsOnLoadDone=true;displayMeetingComments()}});function updateInviteBadgeCount(){$(".circle-badge-left-nav").removeAttr("data-badge");if(typeof inviteSubmissionsPerPage==="object"){$(".meeting-toolbar.feedback-expired").hide();inviteSubmissionsPerPage.map(function(pageCounts){if(pageCounts.page===$global.currentPage){$(".circle-badge-left-nav").attr("data-badge",pageCounts.count);$(".meeting-toolbar.feedback-expired").show()}})}}function narrateModalPagePreview(){var $page=pageDiv($global.currentPage);var $previewContainer=$(".narratemode-preview-container").empty();$page.workpadPagePreview($previewContainer)}function narrationModal(activeTab){if(!checkNarrationBrowser()){return}modalOpen("narration",{active_tab:activeTab},function(){$("body").addClass("narration-mode");$(this).css("zIndex",1100);console.log("narration loaded: ",$(this).attr("id"),$(this).find("ul.tabs").length,$(this).css("zIndex"));narrationModalLoadAudio();narrationModalLoadVideo();if(usePf5){$("#bookletDiv").width($("body").width()-$("#narration").width());$("#bookletDiv").css("margin-left",$("#narration").width());window.dispatchEvent(new Event("resize"))}else{scaleBooklet(true);setBookletPosition()}},function(){stopPreviewAndStream();$("body").removeClass("narration-mode");if(usePf5){$("#bookletDiv").css("width","");$("#bookletDiv").css("margin-left","");window.dispatchEvent(new Event("resize"))}else{$("#narration").remove();setBookletPosition();scaleBooklet(true)}})}function narrationModalLoadTeleprompt(){return $(".narration-teleprompt-content-container").load("/workpadentry/workpadentry_teleprompt/teleprompt",{workpad_id:W["id"],page:$global.currentPage})}function narrationModalLoadAudio(){return $("#narration-modal-audio-tab").load("/narration/narration/audio_narration",{workpad_id:W["id"],page:$global.currentPage},function(){$(".narration-teleprompt-container").show();if($(this).is(":visible")){initAudioRecording.call(this)}})}function narrationModalLoadVideo(){return $("#narration-modal-video-tab").load("/narration/narration/video_narration",{workpad_id:W["id"],page:$global.currentPage},function(){$(".narration-teleprompt-container").show();if($(this).is(":visible")){initVideoRecording.call(this)}})}function narrationModalTabShow(tab){var onShowCallback=$(tab).data("onShowCallback");if(typeof window[onShowCallback]==="function"){window[onShowCallback].call()}}function narrationModalWidth(){var $narrationModal=$("#narration");return $narrationModal.length?$narrationModal.width():0}function narrationChangePageSaveCheck(changePageFunction){if($("#simplebooklet-narrationedit-save").is(":visible")||$("#simplebooklet-videonarrationedit-save").is(":visible")){modalToastConfirm("You have an un-saved narration. Do you want to leave this page anyway?",function(){if(typeof changePageFunction==="function"){changePageFunction.call(this)}else{modalClose()}},true);return true}if($("#simplebooklet-narrationedit-stop").is(":visible")||$("#simplebooklet-videonarrationedit-stop").is(":visible")){modalToast("You are currently recording a narration, preventing your page from turning. Stop your recording if you are ready to move on.");return true}}function narrationUploadTabShow(){$(".narration-teleprompt-container").hide()}function narrationTelepromptEdit(){if(actionRecording()){return}if(istelepromptOpen()){telepromptWindow.close()}$(".narration-teleprompt-content-toggle").toggle()}function narrationTelepromptSave(){var telepromptText=$("textarea[name=teleprompt_text]").val();$.ajax({url:"/workpadentry/workpadentry_teleprompt/save",data:{workpad_id:W["id"],page:$global.currentPage,teleprompt_text:telepromptText},success:function(response){if(response.status==="ok"){narrationModalLoadTeleprompt();$(".narration-teleprompt-content-toggle").toggle()}else{modalToast(response.message)}}})}$(document).on("click",".narrationheadshot-btn",function(){if($(".narrationheadshot-dropdown").is(":visible")){$(".narrationheadshot-dropdown").fadeOut()}else{$(".action-narration-headshot-container").load("/narration/narration/headshot_edit",{workpad_id:W["id"],page:$global.currentPage,has_audio_preview:$(".action-narration-preview-container audio").attr("src")?1:0},function(){fileUploadInit(previewAndSaveHeadshotForNarration,$(".action-headshotrtu-uploader"));$(".narrationheadshot-dropdown").fadeIn()})}});function telepromptAttach(){telepromptWindow.close();if(actionRecording()){stopRecordingNarration()}$(".narration-teleprompt-attach").hide();$(".narration-teleprompt-detach").show()}function telepromptDetach(){return $.ajax({url:"/workpadentry/workpadentry_teleprompt/teleprompt_window",data:{workpad_id:W["id"],page:$global.currentPage},success:function(response){telepromptWindow=windowOpenCenter("","Narration Teleprompter",800,300);var telepromptCloseCheck=setInterval(function(){if(telepromptWindow.closed){clearInterval(telepromptCloseCheck);telepromptAttach()}},500);telepromptDocument=telepromptWindow.document;telepromptDocument.open();telepromptDocument.write(response);telepromptDocument.close();$(".narration-teleprompt-detach").hide();$(".narration-teleprompt-attach").show()}})}function istelepromptOpen(){return telepromptWindow&&!telepromptWindow.closed}function windowOpenCenter(url,title,w,h){var left=screen.width/2-w/2;var top=0;return window.open(url,title,"toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, copyhistory=no, width="+w+", height="+h+", top="+top+", left="+left)}function formatBytes(bytes,decimals=2){if(!+bytes)return"0 Bytes";const k=1024;const dm=decimals<0?0:decimals;const sizes=["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"];const i=Math.floor(Math.log(bytes)/Math.log(k));return`${parseFloat((bytes/Math.pow(k,i)).toFixed(dm))} ${sizes[i]}`}$(document).on("keypress",function(e){if(e.keyCode===KEYCODES.ESC||e.keyCode===KEYCODES.ENTER||e.keyCode===KEYCODES.SPACE){if(actionRecording()){if(window.name==="Narration Teleprompter"){window.close()}else{captureStop.call(this)}return false}}});$(document).on("click",".action-feedback-play",function(){var $container=$(this).closest(".feedback-player-container");var player=$container.find("video,audio").get(0);if(player){player.play();player.addEventListener("ended",event=>{$container.removeClass("playing")});$container.addClass("playing")}});$(document).on("click",".action-feedback-pause",function(){var $container=$(this).closest(".feedback-player-container");var player=$container.find("video,audio").get(0);if(player){player.pause();$container.removeClass("playing")}});$(document).on("click",".action-feedback-toggle-public",function(){var workpadNarrationId=$(this).data("workpad-narration-id");var $container=$(this).closest(".action-workpad-narration-submission-container");if($(this).hasClass("action-feedback-hidden")){$container.find(".action-feedback-toggle-public .action-feedback-hidden").fadeOut();$container.find(".action-feedback-toggle-public .action-feedback-public").fadeIn()}else{$container.find(".action-feedback-toggle-public .action-feedback-hidden").fadeIn();$container.find(".action-feedback-toggle-public .action-feedback-public").fadeOut()}toggleNarrationPublic.call(this,workpadNarrationId).then(function(response){if(response.status==="ok"){$container.toggleClass("action-feedback-public",response.data.public);$container.toggleClass("action-feedback-hidden",!response.data.public)}})});function toggleNarrationPublic(workpadNarrationId){return $.ajax({url:"/workpad/workpad_narration/toggle_public",data:{workpad_id:W["id"],workpad_narration_id:workpadNarrationId}})}$(document).on("click",".action-narration-set-private",function(){$(".action-narration-save,.action-narration-save-text").data("is_private",1);$(".action-narration-set-private").hide();$(".action-narration-unset-private").show();$(".feedback-public-indicator").fadeOut()});$(document).on("click",".action-narration-unset-private",function(){$(".action-narration-save,.action-narration-save-text").data("is_private",0);$(".action-narration-unset-private").hide();$(".action-narration-set-private").show();$(".feedback-public-indicator").fadeIn()});$(document).on("click",".action-narration-toggle-private",function(){var workpadNarrationId=$(this).data("workpad-narration-id");var $container=$(this);toggleNarrationPrivate.call(this,workpadNarrationId).then(function(response){if(response.status==="ok"){$container.toggleClass("state-feedback-private-on",response.data.private);$container.toggleClass("state-feedback-private-off",!response.data.private)}})});function toggleNarrationPrivate(workpadNarrationId){return $.ajax({url:"/workpad/workpad_narration/toggle_private",data:{workpad_id:W["id"],workpad_narration_id:workpadNarrationId}})}document.addEventListener("play",function(e){var media=e.target;$("audio,video").not(media).not("#simplebooklet-videonarrationedit-livestream").each(function(index,otherMedia){otherMedia.pause()})},true);function displayMeetingComments(callback){meetingModalOffset=meetingModalOffset||(MOBILE?null:{top:(window.innerHeight-710)/2,left:window.innerWidth-300});modalOpen("meeting-comments",null,function(){const $mediaElements=$(this).find("audio,video");$mediaElements.on("loadedmetadata",function(){$(this).closest(".meeting-comment-entry").find(".feedback-controls-duration").text(Math.round(this.duration)+"s")});$(this).draggable({stop:function(){meetingModalOffset=$(this).offset()}});if(typeof callback==="function"){callback.call(this)}},function(){$("audio,video",this).each(function(i,media){media.pause()})})}function meetingCommentsShowBottom(){setTimeout(function(){var container=$(".meeting-grid-entry-container").get(0);container.scrollTop=container.scrollHeight},500)}var cancelDisplayMeetingComments=false;$(document).on("click",".action-narration-save-text",narrationSaveText);function narrationSaveText(){var $form=$(this).closest("form");var text=$(this).data("icon")||$form.find("textarea").val();var isPrivate=$(this).data("is_private");if(!text){return}showLoading("Send it to the Internet!");return $.ajax({url:"/workpad/workpad_narration/upload_narration",type:"POST",data:{workpad_key:W["key"],page:$global.currentPage,text:text,is_private:isPrivate,is_feedback:1}}).then(function(response){if(response.status==="ok"){updateFeedbackCount();cancelDisplayMeetingComments=true;displayMeetingComments(meetingCommentsShowBottom)}else{modalToast(response.message)}}).always(function(){hideLoading()})}function updateFeedbackCount(){if(typeof inviteSubmissionsPerPage==="object"){var found=false;inviteSubmissionsPerPage.map(function(pageCounts){if(pageCounts.page===$global.currentPage){pageCounts.count++;found=1}});if(!found){inviteSubmissionsPerPage.push({page:$global.currentPage,count:1})}updateInviteBadgeCount()}}function closeNarrationTextInvite(){if(!cancelDisplayMeetingComments){displayMeetingComments()}else{cancelDisplayMeetingComments=false}}$(document).on("input",".action-feedback-text",feedbackTextDial);function feedbackTextDial(){var percent=($(this).val().length||0)/($(this).prop("maxlength")||1);var canvas=document.getElementById("feedback-text-dial");var ctx=canvas.getContext("2d");ctx.clearRect(0,0,canvas.width,canvas.height);ctx.beginPath();ctx.arc(canvas.width/2,canvas.height/2,canvas.width/2-2,Math.PI*3/2,Math.PI*3/2+percent*2*Math.PI);var gradient=ctx.createLinearGradient(0,0,canvas.width*percent,canvas.height*percent);gradient.addColorStop(0,"#FF3366");gradient.addColorStop(1,"#5D5FEF");ctx.strokeStyle=gradient;ctx.lineWidth=3;ctx.stroke();ctx.fillStyle="#000000";ctx.font="10px sans-serif";var textString=parseInt(100*percent)+"%";var textWidth=ctx.measureText(textString).width;ctx.fillText(textString,canvas.width/2-textWidth/2,20)}
(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.WASM_INFERENCE_DIMENSIONS=exports.BODYPIX_INFERENCE_DIMENSIONS=exports.INFERENCE_CONFIG=exports.MODEL_CONFIG=exports.TFLITE_SIMD_LOADER_NAME=exports.TFLITE_LOADER_NAME=exports.MODEL_NAME=exports.PERSON_PROBABILITY_THRESHOLD=exports.HISTORY_COUNT=exports.MASK_BLUR_RADIUS=exports.DEBOUNCE=exports.BLUR_FILTER_RADIUS=void 0;exports.BLUR_FILTER_RADIUS=15;exports.DEBOUNCE=2;exports.MASK_BLUR_RADIUS=5;exports.HISTORY_COUNT=5;exports.PERSON_PROBABILITY_THRESHOLD=.4;exports.MODEL_NAME="js/selfie_segmentation_landscape.tflite";exports.TFLITE_LOADER_NAME="js/tflite-1-0-0.js";exports.TFLITE_SIMD_LOADER_NAME="js/tflite-simd-1-0-0.js";exports.MODEL_CONFIG={architecture:"MobileNetV1",outputStride:16,multiplier:.75,quantBytes:4};exports.INFERENCE_CONFIG={internalResolution:1,maxDetections:1,segmentationThreshold:.75};exports.BODYPIX_INFERENCE_DIMENSIONS={width:224,height:224};exports.WASM_INFERENCE_DIMENSIONS={width:256,height:144}},{}],2:[function(require,module,exports){"use strict";var __assign=this&&this.__assign||function(){__assign=Object.assign||function(t){for(var s,i=1,n=arguments.length;i<n;i++){s=arguments[i];for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))t[p]=s[p]}return t};return __assign.apply(this,arguments)};Object.defineProperty(exports,"__esModule",{value:true});exports.VirtualBackgroundProcessor=exports.version=exports.isSupported=exports.ImageFit=exports.GaussianBlurBackgroundProcessor=void 0;var GaussianBlurBackgroundProcessor_1=require("./processors/background/GaussianBlurBackgroundProcessor");Object.defineProperty(exports,"GaussianBlurBackgroundProcessor",{enumerable:true,get:function(){return GaussianBlurBackgroundProcessor_1.GaussianBlurBackgroundProcessor}});var VirtualBackgroundProcessor_1=require("./processors/background/VirtualBackgroundProcessor");Object.defineProperty(exports,"VirtualBackgroundProcessor",{enumerable:true,get:function(){return VirtualBackgroundProcessor_1.VirtualBackgroundProcessor}});var types_1=require("./types");Object.defineProperty(exports,"ImageFit",{enumerable:true,get:function(){return types_1.ImageFit}});var support_1=require("./utils/support");Object.defineProperty(exports,"isSupported",{enumerable:true,get:function(){return support_1.isSupported}});var version_1=require("./utils/version");Object.defineProperty(exports,"version",{enumerable:true,get:function(){return version_1.version}});if(typeof window!=="undefined"){window.Twilio=window.Twilio||{};window.Twilio.VideoProcessors=__assign(__assign({},window.Twilio.VideoProcessors),{GaussianBlurBackgroundProcessor:GaussianBlurBackgroundProcessor_1.GaussianBlurBackgroundProcessor,ImageFit:types_1.ImageFit,isSupported:support_1.isSupported,version:version_1.version,VirtualBackgroundProcessor:VirtualBackgroundProcessor_1.VirtualBackgroundProcessor})}},{"./processors/background/GaussianBlurBackgroundProcessor":5,"./processors/background/VirtualBackgroundProcessor":6,"./types":7,"./utils/support":9,"./utils/version":10}],3:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.Processor=void 0;var Processor=function(){function Processor(){}return Processor}();exports.Processor=Processor},{}],4:[function(require,module,exports){"use strict";var __extends=this&&this.__extends||function(){var extendStatics=function(d,b){extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b}||function(d,b){for(var p in b)if(Object.prototype.hasOwnProperty.call(b,p))d[p]=b[p]};return extendStatics(d,b)};return function(d,b){extendStatics(d,b);function __(){this.constructor=d}d.prototype=b===null?Object.create(b):(__.prototype=b.prototype,new __)}}();var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P(function(resolve){resolve(value)})}return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator["throw"](value))}catch(e){reject(e)}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})};var __generator=this&&this.__generator||function(thisArg,body){var _={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]},f,y,t,g;return g={next:verb(0),throw:verb(1),return:verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}};Object.defineProperty(exports,"__esModule",{value:true});exports.BackgroundProcessor=void 0;require("@tensorflow/tfjs-backend-webgl");require("@tensorflow/tfjs-backend-cpu");var body_pix_1=require("@tensorflow-models/body-pix");var Processor_1=require("../Processor");var Benchmark_1=require("../../utils/Benchmark");var version_1=require("../../utils/version");var constants_1=require("../../constants");var BackgroundProcessor=function(_super){__extends(BackgroundProcessor,_super);function BackgroundProcessor(options){var _this=_super.call(this)||this;_this._currentMask=new Uint8ClampedArray;_this._debounce=constants_1.DEBOUNCE;_this._dummyImageData=new ImageData(1,1);_this._historyCount=constants_1.HISTORY_COUNT;_this._inferenceConfig=constants_1.INFERENCE_CONFIG;_this._inferenceDimensions=constants_1.WASM_INFERENCE_DIMENSIONS;_this._inputMemoryOffset=0;_this._isSimdEnabled=null;_this._maskBlurRadius=constants_1.MASK_BLUR_RADIUS;_this._maskUsageCounter=0;_this._outputMemoryOffset=0;_this._personProbabilityThreshold=constants_1.PERSON_PROBABILITY_THRESHOLD;_this._version=version_1.version;if(typeof options.assetsPath!=="string"){throw new Error("assetsPath parameter is missing")}var assetsPath=options.assetsPath;if(assetsPath&&assetsPath[assetsPath.length-1]!=="/"){assetsPath+="/"}_this.maskBlurRadius=options.maskBlurRadius;_this._assetsPath=assetsPath;_this._debounce=options.debounce||constants_1.DEBOUNCE;_this._historyCount=options.historyCount||constants_1.HISTORY_COUNT;_this._inferenceConfig=options.inferenceConfig||constants_1.INFERENCE_CONFIG;_this._personProbabilityThreshold=options.personProbabilityThreshold||constants_1.PERSON_PROBABILITY_THRESHOLD;_this._useWasm=typeof options.useWasm==="boolean"?options.useWasm:true;_this._inferenceDimensions=options.inferenceDimensions||(_this._useWasm?constants_1.WASM_INFERENCE_DIMENSIONS:constants_1.BODYPIX_INFERENCE_DIMENSIONS);_this._benchmark=new Benchmark_1.Benchmark;_this._inputCanvas=document.createElement("canvas");_this._inputContext=_this._inputCanvas.getContext("2d");_this._maskCanvas=new OffscreenCanvas(1,1);_this._maskContext=_this._maskCanvas.getContext("2d");_this._outputCanvas=document.createElement("canvas");_this._outputContext=_this._outputCanvas.getContext("2d");_this._masks=[];return _this}BackgroundProcessor._loadModel=function(config){if(config===void 0){config=constants_1.MODEL_CONFIG}return __awaiter(this,void 0,void 0,function(){var _a;return __generator(this,function(_b){switch(_b.label){case 0:_a=BackgroundProcessor;return[4,body_pix_1.load(config).catch(function(error){return console.error("Unable to load model.",error)})];case 1:_a._model=_b.sent()||null;return[2]}})})};Object.defineProperty(BackgroundProcessor.prototype,"maskBlurRadius",{get:function(){return this._maskBlurRadius},set:function(radius){if(typeof radius!=="number"||radius<0){console.warn("Valid mask blur radius not found. Using "+constants_1.MASK_BLUR_RADIUS+" as default.");radius=constants_1.MASK_BLUR_RADIUS}this._maskBlurRadius=radius},enumerable:false,configurable:true});BackgroundProcessor.prototype.loadModel=function(){return __awaiter(this,void 0,void 0,function(){var _a,tflite,modelResponse,model,modelBufferOffset;return __generator(this,function(_b){switch(_b.label){case 0:return[4,Promise.all([BackgroundProcessor._loadModel(),this._loadTwilioTfLite(),fetch(this._assetsPath+constants_1.MODEL_NAME)])];case 1:_a=_b.sent(),tflite=_a[1],modelResponse=_a[2];return[4,modelResponse.arrayBuffer()];case 2:model=_b.sent();modelBufferOffset=tflite._getModelBufferMemoryOffset();tflite.HEAPU8.set(new Uint8Array(model),modelBufferOffset);tflite._loadModel(model.byteLength);this._inputMemoryOffset=tflite._getInputMemoryOffset()/4;this._outputMemoryOffset=tflite._getOutputMemoryOffset()/4;this._tflite=tflite;return[2]}})})};BackgroundProcessor.prototype.processFrame=function(inputFrameBuffer,outputFrameBuffer){return __awaiter(this,void 0,void 0,function(){var inputFrame,captureWidth,captureHeight,_a,inferenceWidth,inferenceHeight,reInitDummyImage,personMask;return __generator(this,function(_b){switch(_b.label){case 0:if(!BackgroundProcessor._model||!this._tflite){return[2]}if(!inputFrameBuffer||!outputFrameBuffer){throw new Error("Missing input or output frame buffer")}this._benchmark.end("captureFrameDelay");this._benchmark.start("processFrameDelay");inputFrame=inputFrameBuffer;captureWidth=inputFrame.width,captureHeight=inputFrame.height;_a=this._inferenceDimensions,inferenceWidth=_a.width,inferenceHeight=_a.height;if(this._outputCanvas!==outputFrameBuffer){this._outputCanvas=outputFrameBuffer;this._outputContext=outputFrameBuffer.getContext("2d")}reInitDummyImage=false;if(this._inputCanvas.width!==inferenceWidth){this._inputCanvas.width=inferenceWidth;this._maskCanvas.width=inferenceWidth;reInitDummyImage=true}if(this._inputCanvas.height!==inferenceHeight){this._inputCanvas.height=inferenceHeight;this._maskCanvas.height=inferenceHeight;reInitDummyImage=true}if(reInitDummyImage){this._dummyImageData=new ImageData(new Uint8ClampedArray(inferenceWidth*inferenceHeight*4),inferenceWidth,inferenceHeight)}return[4,this._createPersonMask(inputFrame)];case 1:personMask=_b.sent();this._benchmark.start("imageCompositionDelay");this._maskContext.putImageData(personMask,0,0);this._outputContext.save();this._outputContext.filter="blur("+this._maskBlurRadius+"px)";this._outputContext.globalCompositeOperation="copy";this._outputContext.drawImage(this._maskCanvas,0,0,captureWidth,captureHeight);this._outputContext.filter="none";this._outputContext.globalCompositeOperation="source-in";this._outputContext.drawImage(inputFrame,0,0,captureWidth,captureHeight);this._outputContext.globalCompositeOperation="destination-over";this._setBackground(inputFrame);this._outputContext.restore();this._benchmark.end("imageCompositionDelay");this._benchmark.end("processFrameDelay");this._benchmark.end("totalProcessingDelay");this._benchmark.start("totalProcessingDelay");this._benchmark.start("captureFrameDelay");return[2]}})})};BackgroundProcessor.prototype._addMask=function(mask){if(this._masks.length>=this._historyCount){this._masks.splice(0,this._masks.length-this._historyCount+1)}this._masks.push(mask)};BackgroundProcessor.prototype._applyAlpha=function(imageData){var weightedSum=this._masks.reduce(function(sum,mask,j){return sum+(j+1)*(j+1)},0);var pixels=imageData.height*imageData.width;var _loop_1=function(i){var w=this_1._masks.reduce(function(sum,mask,j){return sum+mask[i]*(j+1)*(j+1)},0)/weightedSum;imageData.data[i*4+3]=Math.round(w*255)};var this_1=this;for(var i=0;i<pixels;i++){_loop_1(i)}};BackgroundProcessor.prototype._createPersonMask=function(inputFrame){return __awaiter(this,void 0,void 0,function(){var imageData,shouldRunInference,_a,_b;return __generator(this,function(_c){switch(_c.label){case 0:imageData=this._dummyImageData;shouldRunInference=this._maskUsageCounter<1;this._benchmark.start("inputImageResizeDelay");if(shouldRunInference){imageData=this._getResizedInputImageData(inputFrame)}this._benchmark.end("inputImageResizeDelay");this._benchmark.start("segmentationDelay");if(!shouldRunInference)return[3,4];_a=this;if(!this._useWasm)return[3,1];_b=this._runTwilioTfLiteInference(imageData);return[3,3];case 1:return[4,this._runBodyPixInference(imageData)];case 2:_b=_c.sent();_c.label=3;case 3:_a._currentMask=_b;this._maskUsageCounter=this._debounce;_c.label=4;case 4:this._addMask(this._currentMask);this._applyAlpha(imageData);this._maskUsageCounter--;this._benchmark.end("segmentationDelay");return[2,imageData]}})})};BackgroundProcessor.prototype._getResizedInputImageData=function(inputFrame){var _a=this._inputCanvas,width=_a.width,height=_a.height;this._inputContext.drawImage(inputFrame,0,0,width,height);var imageData=this._inputContext.getImageData(0,0,width,height);return imageData};BackgroundProcessor.prototype._loadJs=function(url){return new Promise(function(resolve,reject){var script=document.createElement("script");script.onload=function(){return resolve()};script.onerror=reject;document.head.append(script);script.src=url})};BackgroundProcessor.prototype._loadTwilioTfLite=function(){return __awaiter(this,void 0,void 0,function(){var tflite,_a;return __generator(this,function(_b){switch(_b.label){case 0:return[4,this._loadJs(this._assetsPath+constants_1.TFLITE_SIMD_LOADER_NAME)];case 1:_b.sent();_b.label=2;case 2:_b.trys.push([2,4,,7]);return[4,window.createTwilioTFLiteSIMDModule()];case 3:tflite=_b.sent();this._isSimdEnabled=true;return[3,7];case 4:_a=_b.sent();console.warn("SIMD not supported. You may experience poor quality of background replacement.");return[4,this._loadJs(this._assetsPath+constants_1.TFLITE_LOADER_NAME)];case 5:_b.sent();return[4,window.createTwilioTFLiteModule()];case 6:tflite=_b.sent();this._isSimdEnabled=false;return[3,7];case 7:return[2,tflite]}})})};BackgroundProcessor.prototype._runBodyPixInference=function(inputImage){return __awaiter(this,void 0,void 0,function(){var segment;return __generator(this,function(_a){switch(_a.label){case 0:return[4,BackgroundProcessor._model.segmentPerson(inputImage,this._inferenceConfig)];case 1:segment=_a.sent();return[2,segment.data]}})})};BackgroundProcessor.prototype._runTwilioTfLiteInference=function(inputImage){var _a=this,_b=_a._inferenceDimensions,width=_b.width,height=_b.height,offset=_a._inputMemoryOffset,tflite=_a._tflite;var pixels=width*height;for(var i=0;i<pixels;i++){tflite.HEAPF32[offset+i*3]=inputImage.data[i*4]/255;tflite.HEAPF32[offset+i*3+1]=inputImage.data[i*4+1]/255;tflite.HEAPF32[offset+i*3+2]=inputImage.data[i*4+2]/255}tflite._runInference();var inferenceData=new Uint8ClampedArray(pixels*4);for(var i=0;i<pixels;i++){var personProbability=tflite.HEAPF32[this._outputMemoryOffset+i];inferenceData[i]=Number(personProbability>=this._personProbabilityThreshold)*personProbability}return inferenceData};BackgroundProcessor._model=null;return BackgroundProcessor}(Processor_1.Processor);exports.BackgroundProcessor=BackgroundProcessor},{"../../constants":1,"../../utils/Benchmark":8,"../../utils/version":10,"../Processor":3,"@tensorflow-models/body-pix":15,"@tensorflow/tfjs-backend-cpu":32,"@tensorflow/tfjs-backend-webgl":33}],5:[function(require,module,exports){"use strict";var __extends=this&&this.__extends||function(){var extendStatics=function(d,b){extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b}||function(d,b){for(var p in b)if(Object.prototype.hasOwnProperty.call(b,p))d[p]=b[p]};return extendStatics(d,b)};return function(d,b){extendStatics(d,b);function __(){this.constructor=d}d.prototype=b===null?Object.create(b):(__.prototype=b.prototype,new __)}}();Object.defineProperty(exports,"__esModule",{value:true});exports.GaussianBlurBackgroundProcessor=void 0;var BackgroundProcessor_1=require("./BackgroundProcessor");var constants_1=require("../../constants");var GaussianBlurBackgroundProcessor=function(_super){__extends(GaussianBlurBackgroundProcessor,_super);function GaussianBlurBackgroundProcessor(options){var _this=_super.call(this,options)||this;_this._blurFilterRadius=constants_1.BLUR_FILTER_RADIUS;_this._name="GaussianBlurBackgroundProcessor";_this.blurFilterRadius=options.blurFilterRadius;return _this}Object.defineProperty(GaussianBlurBackgroundProcessor.prototype,"blurFilterRadius",{get:function(){return this._blurFilterRadius},set:function(radius){if(!radius){console.warn("Valid blur filter radius not found. Using "+constants_1.BLUR_FILTER_RADIUS+" as default.");radius=constants_1.BLUR_FILTER_RADIUS}this._blurFilterRadius=radius},enumerable:false,configurable:true});GaussianBlurBackgroundProcessor.prototype._setBackground=function(inputFrame){this._outputContext.filter="blur("+this._blurFilterRadius+"px)";this._outputContext.drawImage(inputFrame,0,0)};return GaussianBlurBackgroundProcessor}(BackgroundProcessor_1.BackgroundProcessor);exports.GaussianBlurBackgroundProcessor=GaussianBlurBackgroundProcessor},{"../../constants":1,"./BackgroundProcessor":4}],6:[function(require,module,exports){"use strict";var __extends=this&&this.__extends||function(){var extendStatics=function(d,b){extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b}||function(d,b){for(var p in b)if(Object.prototype.hasOwnProperty.call(b,p))d[p]=b[p]};return extendStatics(d,b)};return function(d,b){extendStatics(d,b);function __(){this.constructor=d}d.prototype=b===null?Object.create(b):(__.prototype=b.prototype,new __)}}();Object.defineProperty(exports,"__esModule",{value:true});exports.VirtualBackgroundProcessor=void 0;var BackgroundProcessor_1=require("./BackgroundProcessor");var types_1=require("../../types");var VirtualBackgroundProcessor=function(_super){__extends(VirtualBackgroundProcessor,_super);function VirtualBackgroundProcessor(options){var _this=_super.call(this,options)||this;_this._name="VirtualBackgroundProcessor";_this.backgroundImage=options.backgroundImage;_this.fitType=options.fitType;return _this}Object.defineProperty(VirtualBackgroundProcessor.prototype,"backgroundImage",{get:function(){return this._backgroundImage},set:function(image){if(!image||!image.complete||!image.naturalHeight){throw new Error("Invalid image. Make sure that the image is an HTMLImageElement and has been successfully loaded")}this._backgroundImage=image},enumerable:false,configurable:true});Object.defineProperty(VirtualBackgroundProcessor.prototype,"fitType",{get:function(){return this._fitType},set:function(fitType){var validTypes=Object.keys(types_1.ImageFit);if(!validTypes.includes(fitType)){console.warn("Valid fitType not found. Using '"+types_1.ImageFit.Fill+"' as default.");fitType=types_1.ImageFit.Fill}this._fitType=fitType},enumerable:false,configurable:true});VirtualBackgroundProcessor.prototype._setBackground=function(){var img=this._backgroundImage;var imageWidth=img.naturalWidth;var imageHeight=img.naturalHeight;var canvasWidth=this._outputCanvas.width;var canvasHeight=this._outputCanvas.height;if(this._fitType===types_1.ImageFit.Fill){this._outputContext.drawImage(img,0,0,imageWidth,imageHeight,0,0,canvasWidth,canvasHeight)}else if(this._fitType===types_1.ImageFit.None){this._outputContext.drawImage(img,0,0,imageWidth,imageHeight)}else if(this._fitType===types_1.ImageFit.Contain){var _a=this._getFitPosition(imageWidth,imageHeight,canvasWidth,canvasHeight,types_1.ImageFit.Contain),x=_a.x,y=_a.y,w=_a.w,h=_a.h;this._outputContext.drawImage(img,0,0,imageWidth,imageHeight,x,y,w,h)}else if(this._fitType===types_1.ImageFit.Cover){var _b=this._getFitPosition(imageWidth,imageHeight,canvasWidth,canvasHeight,types_1.ImageFit.Cover),x=_b.x,y=_b.y,w=_b.w,h=_b.h;this._outputContext.drawImage(img,0,0,imageWidth,imageHeight,x,y,w,h)}};VirtualBackgroundProcessor.prototype._getFitPosition=function(contentWidth,contentHeight,viewportWidth,viewportHeight,type){var factor=viewportWidth/contentWidth;var newContentWidth=viewportWidth;var newContentHeight=factor*contentHeight;if(type===types_1.ImageFit.Contain&&newContentHeight>viewportHeight||type===types_1.ImageFit.Cover&&viewportHeight>newContentHeight){factor=viewportHeight/newContentHeight;newContentWidth=factor*newContentWidth;newContentHeight=viewportHeight}var x=(viewportWidth-newContentWidth)/2;var y=(viewportHeight-newContentHeight)/2;return{x:x,y:y,w:newContentWidth,h:newContentHeight}};return VirtualBackgroundProcessor}(BackgroundProcessor_1.BackgroundProcessor);exports.VirtualBackgroundProcessor=VirtualBackgroundProcessor},{"../../types":7,"./BackgroundProcessor":4}],7:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ImageFit=void 0;var ImageFit;(function(ImageFit){ImageFit["Contain"]="Contain";ImageFit["Cover"]="Cover";ImageFit["Fill"]="Fill";ImageFit["None"]="None"})(ImageFit=exports.ImageFit||(exports.ImageFit={}))},{}],8:[function(require,module,exports){"use strict";var __assign=this&&this.__assign||function(){__assign=Object.assign||function(t){for(var s,i=1,n=arguments.length;i<n;i++){s=arguments[i];for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))t[p]=s[p]}return t};return __assign.apply(this,arguments)};Object.defineProperty(exports,"__esModule",{value:true});exports.Benchmark=void 0;var Benchmark=function(){function Benchmark(){this._timingCache=new Map;this._timings=new Map}Benchmark.prototype.end=function(name){var timing=this._timings.get(name);if(!timing){return}timing.end=Date.now();timing.delay=timing.end-timing.start;this._save(name,__assign({},timing))};Benchmark.prototype.getAverageDelay=function(name){var timingCache=this._timingCache.get(name);if(!timingCache||!timingCache.length){return}return timingCache.map(function(timing){return timing.delay}).reduce(function(total,value){return total+=value},0)/timingCache.length};Benchmark.prototype.getNames=function(){return Array.from(this._timingCache.keys())};Benchmark.prototype.getRate=function(name){var timingCache=this._timingCache.get(name);if(!timingCache||timingCache.length<2){return}var totalDelay=timingCache[timingCache.length-1].end-timingCache[0].start;return timingCache.length/totalDelay*1e3};Benchmark.prototype.start=function(name){var timing=this._timings.get(name);if(!timing){timing={};this._timings.set(name,timing)}timing.start=Date.now();delete timing.end;delete timing.delay};Benchmark.prototype._save=function(name,timing){var timingCache=this._timingCache.get(name);if(!timingCache){timingCache=[];this._timingCache.set(name,timingCache)}timingCache.push(timing);if(timingCache.length>Benchmark.cacheSize){timingCache.splice(0,timingCache.length-Benchmark.cacheSize)}};Benchmark.cacheSize=41;return Benchmark}();exports.Benchmark=Benchmark},{}],9:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.isSupported=exports.isBrowserSupported=void 0;function isBrowserSupported(){if(typeof window!=="undefined"){return!!window.OffscreenCanvas&&!/Mobi/i.test(window.navigator.userAgent)&&!!window.chrome}else{return false}}exports.isBrowserSupported=isBrowserSupported;exports.isSupported=isBrowserSupported()},{}],10:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.version=void 0;exports.version="1.0.2"},{}],11:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.BaseModel=void 0;var tf=require("@tensorflow/tfjs-core");var BaseModel=function(){function BaseModel(model,outputStride){this.model=model;this.outputStride=outputStride;var inputShape=this.model.inputs[0].shape;tf.util.assert(inputShape[1]===-1&&inputShape[2]===-1,function(){return"Input shape ["+inputShape[1]+", "+inputShape[2]+"] "+"must both be equal to or -1"})}BaseModel.prototype.predict=function(input){var _this=this;return tf.tidy(function(){var asFloat=_this.preprocessInput(tf.cast(input,"float32"));var asBatch=tf.expandDims(asFloat,0);var results=_this.model.predict(asBatch);var results3d=results.map(function(y){return tf.squeeze(y,[0])});var namedResults=_this.nameOutputResults(results3d);return{heatmapScores:tf.sigmoid(namedResults.heatmap),offsets:namedResults.offsets,displacementFwd:namedResults.displacementFwd,displacementBwd:namedResults.displacementBwd,segmentation:namedResults.segmentation,partHeatmaps:namedResults.partHeatmaps,longOffsets:namedResults.longOffsets,partOffsets:namedResults.partOffsets}})};BaseModel.prototype.dispose=function(){this.model.dispose()};return BaseModel}();exports.BaseModel=BaseModel},{"@tensorflow/tfjs-core":35}],12:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.cpuBlur=void 0;function cpuBlur(canvas,image,blur){var ctx=canvas.getContext("2d");var sum=0;var delta=5;var alphaLeft=1/(2*Math.PI*delta*delta);var step=blur<3?1:2;for(var y=-blur;y<=blur;y+=step){for(var x=-blur;x<=blur;x+=step){var weight=alphaLeft*Math.exp(-(x*x+y*y)/(2*delta*delta));sum+=weight}}for(var y=-blur;y<=blur;y+=step){for(var x=-blur;x<=blur;x+=step){ctx.globalAlpha=alphaLeft*Math.exp(-(x*x+y*y)/(2*delta*delta))/sum*blur;ctx.drawImage(image,x,y)}}ctx.globalAlpha=1}exports.cpuBlur=cpuBlur},{}],13:[function(require,module,exports){"use strict";var __assign=this&&this.__assign||function(){__assign=Object.assign||function(t){for(var s,i=1,n=arguments.length;i<n;i++){s=arguments[i];for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))t[p]=s[p]}return t};return __assign.apply(this,arguments)};var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P(function(resolve){resolve(value)})}return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator["throw"](value))}catch(e){reject(e)}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})};var __generator=this&&this.__generator||function(thisArg,body){var _={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]},f,y,t,g;return g={next:verb(0),throw:verb(1),return:verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}};Object.defineProperty(exports,"__esModule",{value:true});exports.load=exports.BodyPix=exports.MULTI_PERSON_INSTANCE_INFERENCE_CONFIG=exports.PERSON_INFERENCE_CONFIG=void 0;var tfconv=require("@tensorflow/tfjs-converter");var tf=require("@tensorflow/tfjs-core");var decode_part_map_1=require("./decode_part_map");var mobilenet_1=require("./mobilenet");var decode_instance_masks_1=require("./multi_person/decode_instance_masks");var decode_multiple_poses_1=require("./multi_person/decode_multiple_poses");var resnet_1=require("./resnet");var saved_models_1=require("./saved_models");var util_1=require("./util");var APPLY_SIGMOID_ACTIVATION=true;var FLIP_POSES_AFTER_SCALING=false;var MOBILENET_V1_CONFIG={architecture:"MobileNetV1",outputStride:16,quantBytes:4,multiplier:.75};var VALID_ARCHITECTURE=["MobileNetV1","ResNet50"];var VALID_STRIDE={MobileNetV1:[8,16,32],ResNet50:[32,16]};var VALID_MULTIPLIER={MobileNetV1:[.5,.75,1],ResNet50:[1]};var VALID_QUANT_BYTES=[1,2,4];function validateModelConfig(config){config=config||MOBILENET_V1_CONFIG;if(config.architecture==null){config.architecture="MobileNetV1"}if(VALID_ARCHITECTURE.indexOf(config.architecture)<0){throw new Error("Invalid architecture "+config.architecture+". "+("Should be one of "+VALID_ARCHITECTURE))}if(config.outputStride==null){config.outputStride=16}if(VALID_STRIDE[config.architecture].indexOf(config.outputStride)<0){throw new Error("Invalid outputStride "+config.outputStride+". "+("Should be one of "+VALID_STRIDE[config.architecture]+" ")+("for architecture "+config.architecture+"."))}if(config.multiplier==null){config.multiplier=1}if(VALID_MULTIPLIER[config.architecture].indexOf(config.multiplier)<0){throw new Error("Invalid multiplier "+config.multiplier+". "+("Should be one of "+VALID_MULTIPLIER[config.architecture]+" ")+("for architecture "+config.architecture+"."))}if(config.quantBytes==null){config.quantBytes=4}if(VALID_QUANT_BYTES.indexOf(config.quantBytes)<0){throw new Error("Invalid quantBytes "+config.quantBytes+". "+("Should be one of "+VALID_QUANT_BYTES+" ")+("for architecture "+config.architecture+"."))}return config}exports.PERSON_INFERENCE_CONFIG={flipHorizontal:false,internalResolution:"medium",segmentationThreshold:.7,maxDetections:10,scoreThreshold:.4,nmsRadius:20};exports.MULTI_PERSON_INSTANCE_INFERENCE_CONFIG={flipHorizontal:false,internalResolution:"medium",segmentationThreshold:.7,maxDetections:10,scoreThreshold:.4,nmsRadius:20,minKeypointScore:.3,refineSteps:10};function validatePersonInferenceConfig(config){var segmentationThreshold=config.segmentationThreshold,maxDetections=config.maxDetections,scoreThreshold=config.scoreThreshold,nmsRadius=config.nmsRadius;if(segmentationThreshold<0||segmentationThreshold>1){throw new Error("segmentationThreshold "+segmentationThreshold+". "+"Should be in range [0.0, 1.0]")}if(maxDetections<=0){throw new Error("Invalid maxDetections "+maxDetections+". "+"Should be > 0")}if(scoreThreshold<0||scoreThreshold>1){throw new Error("Invalid scoreThreshold "+scoreThreshold+". "+"Should be in range [0.0, 1.0]")}if(nmsRadius<=0){throw new Error("Invalid nmsRadius "+nmsRadius+".")}}function validateMultiPersonInstanceInferenceConfig(config){var segmentationThreshold=config.segmentationThreshold,maxDetections=config.maxDetections,scoreThreshold=config.scoreThreshold,nmsRadius=config.nmsRadius,minKeypointScore=config.minKeypointScore,refineSteps=config.refineSteps;if(segmentationThreshold<0||segmentationThreshold>1){throw new Error("segmentationThreshold "+segmentationThreshold+". "+"Should be in range [0.0, 1.0]")}if(maxDetections<=0){throw new Error("Invalid maxDetections "+maxDetections+". "+"Should be > 0")}if(scoreThreshold<0||scoreThreshold>1){throw new Error("Invalid scoreThreshold "+scoreThreshold+". "+"Should be in range [0.0, 1.0]")}if(nmsRadius<=0){throw new Error("Invalid nmsRadius "+nmsRadius+".")}if(minKeypointScore<0||minKeypointScore>1){throw new Error("Invalid minKeypointScore "+minKeypointScore+"."+"Should be in range [0.0, 1.0]")}if(refineSteps<=0||refineSteps>20){throw new Error("Invalid refineSteps "+refineSteps+"."+"Should be in range [1, 20]")}}var BodyPix=function(){function BodyPix(net){this.baseModel=net}BodyPix.prototype.predictForPersonSegmentation=function(input){var _a=this.baseModel.predict(input),segmentation=_a.segmentation,heatmapScores=_a.heatmapScores,offsets=_a.offsets,displacementFwd=_a.displacementFwd,displacementBwd=_a.displacementBwd;return{segmentLogits:segmentation,heatmapScores:heatmapScores,offsets:offsets,displacementFwd:displacementFwd,displacementBwd:displacementBwd}};BodyPix.prototype.predictForPersonSegmentationAndPart=function(input){var _a=this.baseModel.predict(input),segmentation=_a.segmentation,partHeatmaps=_a.partHeatmaps,heatmapScores=_a.heatmapScores,offsets=_a.offsets,displacementFwd=_a.displacementFwd,displacementBwd=_a.displacementBwd;return{segmentLogits:segmentation,partHeatmapLogits:partHeatmaps,heatmapScores:heatmapScores,offsets:offsets,displacementFwd:displacementFwd,displacementBwd:displacementBwd}};BodyPix.prototype.predictForMultiPersonInstanceSegmentationAndPart=function(input){var _a=this.baseModel.predict(input),segmentation=_a.segmentation,longOffsets=_a.longOffsets,heatmapScores=_a.heatmapScores,offsets=_a.offsets,displacementFwd=_a.displacementFwd,displacementBwd=_a.displacementBwd,partHeatmaps=_a.partHeatmaps;return{segmentLogits:segmentation,longOffsets:longOffsets,heatmapScores:heatmapScores,offsets:offsets,displacementFwd:displacementFwd,displacementBwd:displacementBwd,partHeatmaps:partHeatmaps}};BodyPix.prototype.segmentPersonActivation=function(input,internalResolution,segmentationThreshold){var _this=this;if(segmentationThreshold===void 0){segmentationThreshold=.5}var _a=util_1.getInputSize(input),height=_a[0],width=_a[1];var internalResolutionHeightAndWidth=util_1.toInputResolutionHeightAndWidth(internalResolution,this.baseModel.outputStride,[height,width]);var _b=util_1.padAndResizeTo(input,internalResolutionHeightAndWidth),resized=_b.resized,padding=_b.padding;var _c=tf.tidy(function(){var _a=_this.predictForPersonSegmentation(resized),segmentLogits=_a.segmentLogits,heatmapScores=_a.heatmapScores,offsets=_a.offsets,displacementFwd=_a.displacementFwd,displacementBwd=_a.displacementBwd;var _b=resized.shape,resizedHeight=_b[0],resizedWidth=_b[1];var scaledSegmentScores=util_1.scaleAndCropToInputTensorShape(segmentLogits,[height,width],[resizedHeight,resizedWidth],[[padding.top,padding.bottom],[padding.left,padding.right]],APPLY_SIGMOID_ACTIVATION);return{segmentation:decode_part_map_1.toMaskTensor(tf.squeeze(scaledSegmentScores),segmentationThreshold),heatmapScores:heatmapScores,offsets:offsets,displacementFwd:displacementFwd,displacementBwd:displacementBwd}}),segmentation=_c.segmentation,heatmapScores=_c.heatmapScores,offsets=_c.offsets,displacementFwd=_c.displacementFwd,displacementBwd=_c.displacementBwd;resized.dispose();return{segmentation:segmentation,heatmapScores:heatmapScores,offsets:offsets,displacementFwd:displacementFwd,displacementBwd:displacementBwd,padding:padding,internalResolutionHeightAndWidth:internalResolutionHeightAndWidth}};BodyPix.prototype.segmentPerson=function(input,config){if(config===void 0){config=exports.PERSON_INFERENCE_CONFIG}return __awaiter(this,void 0,void 0,function(){var _a,segmentation,heatmapScores,offsets,displacementFwd,displacementBwd,padding,internalResolutionHeightAndWidth,_b,height,width,result,tensorBuffers,scoresBuf,offsetsBuf,displacementsFwdBuf,displacementsBwdBuf,poses;return __generator(this,function(_c){switch(_c.label){case 0:config=__assign(__assign({},exports.PERSON_INFERENCE_CONFIG),config);validatePersonInferenceConfig(config);_a=this.segmentPersonActivation(input,config.internalResolution,config.segmentationThreshold),segmentation=_a.segmentation,heatmapScores=_a.heatmapScores,offsets=_a.offsets,displacementFwd=_a.displacementFwd,displacementBwd=_a.displacementBwd,padding=_a.padding,internalResolutionHeightAndWidth=_a.internalResolutionHeightAndWidth;_b=segmentation.shape,height=_b[0],width=_b[1];return[4,segmentation.data()];case 1:result=_c.sent();segmentation.dispose();return[4,util_1.toTensorBuffers3D([heatmapScores,offsets,displacementFwd,displacementBwd])];case 2:tensorBuffers=_c.sent();scoresBuf=tensorBuffers[0],offsetsBuf=tensorBuffers[1],displacementsFwdBuf=tensorBuffers[2],displacementsBwdBuf=tensorBuffers[3];poses=decode_multiple_poses_1.decodeMultiplePoses(scoresBuf,offsetsBuf,displacementsFwdBuf,displacementsBwdBuf,this.baseModel.outputStride,config.maxDetections,config.scoreThreshold,config.nmsRadius);poses=util_1.scaleAndFlipPoses(poses,[height,width],internalResolutionHeightAndWidth,padding,FLIP_POSES_AFTER_SCALING);heatmapScores.dispose();offsets.dispose();displacementFwd.dispose();displacementBwd.dispose();return[2,{height:height,width:width,data:result,allPoses:poses}]}})})};BodyPix.prototype.segmentMultiPerson=function(input,config){if(config===void 0){config=exports.MULTI_PERSON_INSTANCE_INFERENCE_CONFIG}return __awaiter(this,void 0,void 0,function(){var _a,height,width,internalResolutionHeightAndWidth,_b,resized,padding,_c,segmentation,longOffsets,heatmapScoresRaw,offsetsRaw,displacementFwdRaw,displacementBwdRaw,tensorBuffers,scoresBuf,offsetsBuf,displacementsFwdBuf,displacementsBwdBuf,poses,instanceMasks;var _this=this;return __generator(this,function(_d){switch(_d.label){case 0:config=__assign(__assign({},exports.MULTI_PERSON_INSTANCE_INFERENCE_CONFIG),config);validateMultiPersonInstanceInferenceConfig(config);_a=util_1.getInputSize(input),height=_a[0],width=_a[1];internalResolutionHeightAndWidth=util_1.toInputResolutionHeightAndWidth(config.internalResolution,this.baseModel.outputStride,[height,width]);_b=util_1.padAndResizeTo(input,internalResolutionHeightAndWidth),resized=_b.resized,padding=_b.padding;_c=tf.tidy(function(){var _a=_this.predictForMultiPersonInstanceSegmentationAndPart(resized),segmentLogits=_a.segmentLogits,longOffsets=_a.longOffsets,heatmapScores=_a.heatmapScores,offsets=_a.offsets,displacementFwd=_a.displacementFwd,displacementBwd=_a.displacementBwd;var scaledSegmentScores=util_1.scaleAndCropToInputTensorShape(segmentLogits,[height,width],internalResolutionHeightAndWidth,[[padding.top,padding.bottom],[padding.left,padding.right]],APPLY_SIGMOID_ACTIVATION);var longOffsetsResized=false;var scaledLongOffsets;if(longOffsetsResized){scaledLongOffsets=util_1.scaleAndCropToInputTensorShape(longOffsets,[height,width],internalResolutionHeightAndWidth,[[padding.top,padding.bottom],[padding.left,padding.right]],APPLY_SIGMOID_ACTIVATION)}else{scaledLongOffsets=longOffsets}var segmentation=decode_part_map_1.toMaskTensor(tf.squeeze(scaledSegmentScores),config.segmentationThreshold);return{segmentation:segmentation,longOffsets:scaledLongOffsets,heatmapScoresRaw:heatmapScores,offsetsRaw:offsets,displacementFwdRaw:displacementFwd,displacementBwdRaw:displacementBwd}}),segmentation=_c.segmentation,longOffsets=_c.longOffsets,heatmapScoresRaw=_c.heatmapScoresRaw,offsetsRaw=_c.offsetsRaw,displacementFwdRaw=_c.displacementFwdRaw,displacementBwdRaw=_c.displacementBwdRaw;return[4,util_1.toTensorBuffers3D([heatmapScoresRaw,offsetsRaw,displacementFwdRaw,displacementBwdRaw])];case 1:tensorBuffers=_d.sent();scoresBuf=tensorBuffers[0],offsetsBuf=tensorBuffers[1],displacementsFwdBuf=tensorBuffers[2],displacementsBwdBuf=tensorBuffers[3];poses=decode_multiple_poses_1.decodeMultiplePoses(scoresBuf,offsetsBuf,displacementsFwdBuf,displacementsBwdBuf,this.baseModel.outputStride,config.maxDetections,config.scoreThreshold,config.nmsRadius);poses=util_1.scaleAndFlipPoses(poses,[height,width],internalResolutionHeightAndWidth,padding,FLIP_POSES_AFTER_SCALING);return[4,decode_instance_masks_1.decodePersonInstanceMasks(segmentation,longOffsets,poses,height,width,this.baseModel.outputStride,internalResolutionHeightAndWidth,padding,config.scoreThreshold,config.refineSteps,config.minKeypointScore,config.maxDetections)];case 2:instanceMasks=_d.sent();resized.dispose();segmentation.dispose();longOffsets.dispose();heatmapScoresRaw.dispose();offsetsRaw.dispose();displacementFwdRaw.dispose();displacementBwdRaw.dispose();return[2,instanceMasks]}})})};BodyPix.prototype.segmentPersonPartsActivation=function(input,internalResolution,segmentationThreshold){var _this=this;if(segmentationThreshold===void 0){segmentationThreshold=.5}var _a=util_1.getInputSize(input),height=_a[0],width=_a[1];var internalResolutionHeightAndWidth=util_1.toInputResolutionHeightAndWidth(internalResolution,this.baseModel.outputStride,[height,width]);var _b=util_1.padAndResizeTo(input,internalResolutionHeightAndWidth),resized=_b.resized,padding=_b.padding;var _c=tf.tidy(function(){var _a=_this.predictForPersonSegmentationAndPart(resized),segmentLogits=_a.segmentLogits,partHeatmapLogits=_a.partHeatmapLogits,heatmapScores=_a.heatmapScores,offsets=_a.offsets,displacementFwd=_a.displacementFwd,displacementBwd=_a.displacementBwd;var _b=resized.shape,resizedHeight=_b[0],resizedWidth=_b[1];var scaledSegmentScores=util_1.scaleAndCropToInputTensorShape(segmentLogits,[height,width],[resizedHeight,resizedWidth],[[padding.top,padding.bottom],[padding.left,padding.right]],APPLY_SIGMOID_ACTIVATION);var scaledPartHeatmapScore=util_1.scaleAndCropToInputTensorShape(partHeatmapLogits,[height,width],[resizedHeight,resizedWidth],[[padding.top,padding.bottom],[padding.left,padding.right]],APPLY_SIGMOID_ACTIVATION);var segmentation=decode_part_map_1.toMaskTensor(tf.squeeze(scaledSegmentScores),segmentationThreshold);return{partSegmentation:decode_part_map_1.decodePartSegmentation(segmentation,scaledPartHeatmapScore),heatmapScores:heatmapScores,offsets:offsets,displacementFwd:displacementFwd,displacementBwd:displacementBwd}}),partSegmentation=_c.partSegmentation,heatmapScores=_c.heatmapScores,offsets=_c.offsets,displacementFwd=_c.displacementFwd,displacementBwd=_c.displacementBwd;resized.dispose();return{partSegmentation:partSegmentation,heatmapScores:heatmapScores,offsets:offsets,displacementFwd:displacementFwd,displacementBwd:displacementBwd,padding:padding,internalResolutionHeightAndWidth:internalResolutionHeightAndWidth}};BodyPix.prototype.segmentPersonParts=function(input,config){if(config===void 0){config=exports.PERSON_INFERENCE_CONFIG}return __awaiter(this,void 0,void 0,function(){var _a,partSegmentation,heatmapScores,offsets,displacementFwd,displacementBwd,padding,internalResolutionHeightAndWidth,_b,height,width,data,tensorBuffers,scoresBuf,offsetsBuf,displacementsFwdBuf,displacementsBwdBuf,poses;return __generator(this,function(_c){switch(_c.label){case 0:config=__assign(__assign({},exports.PERSON_INFERENCE_CONFIG),config);validatePersonInferenceConfig(config);_a=this.segmentPersonPartsActivation(input,config.internalResolution,config.segmentationThreshold),partSegmentation=_a.partSegmentation,heatmapScores=_a.heatmapScores,offsets=_a.offsets,displacementFwd=_a.displacementFwd,displacementBwd=_a.displacementBwd,padding=_a.padding,internalResolutionHeightAndWidth=_a.internalResolutionHeightAndWidth;_b=partSegmentation.shape,height=_b[0],width=_b[1];return[4,partSegmentation.data()];case 1:data=_c.sent();partSegmentation.dispose();return[4,util_1.toTensorBuffers3D([heatmapScores,offsets,displacementFwd,displacementBwd])];case 2:tensorBuffers=_c.sent();scoresBuf=tensorBuffers[0],offsetsBuf=tensorBuffers[1],displacementsFwdBuf=tensorBuffers[2],displacementsBwdBuf=tensorBuffers[3];poses=decode_multiple_poses_1.decodeMultiplePoses(scoresBuf,offsetsBuf,displacementsFwdBuf,displacementsBwdBuf,this.baseModel.outputStride,config.maxDetections,config.scoreThreshold,config.nmsRadius);poses=util_1.scaleAndFlipPoses(poses,[height,width],internalResolutionHeightAndWidth,padding,FLIP_POSES_AFTER_SCALING);heatmapScores.dispose();offsets.dispose();displacementFwd.dispose();displacementBwd.dispose();return[2,{height:height,width:width,data:data,allPoses:poses}]}})})};BodyPix.prototype.segmentMultiPersonParts=function(input,config){if(config===void 0){config=exports.MULTI_PERSON_INSTANCE_INFERENCE_CONFIG}return __awaiter(this,void 0,void 0,function(){var _a,height,width,internalResolutionHeightAndWidth,_b,resized,padding,_c,segmentation,longOffsets,heatmapScoresRaw,offsetsRaw,displacementFwdRaw,displacementBwdRaw,partSegmentation,tensorBuffers,scoresBuf,offsetsBuf,displacementsFwdBuf,displacementsBwdBuf,poses,instanceMasks;var _this=this;return __generator(this,function(_d){switch(_d.label){case 0:config=__assign(__assign({},exports.MULTI_PERSON_INSTANCE_INFERENCE_CONFIG),config);validateMultiPersonInstanceInferenceConfig(config);_a=util_1.getInputSize(input),height=_a[0],width=_a[1];internalResolutionHeightAndWidth=util_1.toInputResolutionHeightAndWidth(config.internalResolution,this.baseModel.outputStride,[height,width]);_b=util_1.padAndResizeTo(input,internalResolutionHeightAndWidth),resized=_b.resized,padding=_b.padding;_c=tf.tidy(function(){var _a=_this.predictForMultiPersonInstanceSegmentationAndPart(resized),segmentLogits=_a.segmentLogits,longOffsets=_a.longOffsets,heatmapScores=_a.heatmapScores,offsets=_a.offsets,displacementFwd=_a.displacementFwd,displacementBwd=_a.displacementBwd,partHeatmaps=_a.partHeatmaps;var scaledSegmentScores=util_1.scaleAndCropToInputTensorShape(segmentLogits,[height,width],internalResolutionHeightAndWidth,[[padding.top,padding.bottom],[padding.left,padding.right]],APPLY_SIGMOID_ACTIVATION);var scaledPartSegmentationScores=util_1.scaleAndCropToInputTensorShape(partHeatmaps,[height,width],internalResolutionHeightAndWidth,[[padding.top,padding.bottom],[padding.left,padding.right]],APPLY_SIGMOID_ACTIVATION);var scaledLongOffsets=longOffsets;var segmentation=decode_part_map_1.toMaskTensor(tf.squeeze(scaledSegmentScores),config.segmentationThreshold);var partSegmentation=decode_part_map_1.decodeOnlyPartSegmentation(scaledPartSegmentationScores);return{segmentation:segmentation,longOffsets:scaledLongOffsets,heatmapScoresRaw:heatmapScores,offsetsRaw:offsets,displacementFwdRaw:displacementFwd,displacementBwdRaw:displacementBwd,partSegmentation:partSegmentation}}),segmentation=_c.segmentation,longOffsets=_c.longOffsets,heatmapScoresRaw=_c.heatmapScoresRaw,offsetsRaw=_c.offsetsRaw,displacementFwdRaw=_c.displacementFwdRaw,displacementBwdRaw=_c.displacementBwdRaw,partSegmentation=_c.partSegmentation;return[4,util_1.toTensorBuffers3D([heatmapScoresRaw,offsetsRaw,displacementFwdRaw,displacementBwdRaw])];case 1:tensorBuffers=_d.sent();scoresBuf=tensorBuffers[0],offsetsBuf=tensorBuffers[1],displacementsFwdBuf=tensorBuffers[2],displacementsBwdBuf=tensorBuffers[3];poses=decode_multiple_poses_1.decodeMultiplePoses(scoresBuf,offsetsBuf,displacementsFwdBuf,displacementsBwdBuf,this.baseModel.outputStride,config.maxDetections,config.scoreThreshold,config.nmsRadius);poses=util_1.scaleAndFlipPoses(poses,[height,width],internalResolutionHeightAndWidth,padding,FLIP_POSES_AFTER_SCALING);return[4,decode_instance_masks_1.decodePersonInstancePartMasks(segmentation,longOffsets,partSegmentation,poses,height,width,this.baseModel.outputStride,internalResolutionHeightAndWidth,padding,config.scoreThreshold,config.refineSteps,config.minKeypointScore,config.maxDetections)];case 2:instanceMasks=_d.sent();resized.dispose();segmentation.dispose();longOffsets.dispose();heatmapScoresRaw.dispose();offsetsRaw.dispose();displacementFwdRaw.dispose();displacementBwdRaw.dispose();partSegmentation.dispose();return[2,instanceMasks]}})})};BodyPix.prototype.dispose=function(){this.baseModel.dispose()};return BodyPix}();exports.BodyPix=BodyPix;function loadMobileNet(config){return __awaiter(this,void 0,void 0,function(){var outputStride,quantBytes,multiplier,url,graphModel,mobilenet;return __generator(this,function(_a){switch(_a.label){case 0:outputStride=config.outputStride;quantBytes=config.quantBytes;multiplier=config.multiplier;if(tf==null){throw new Error("Cannot find TensorFlow.js. If you are using a <script> tag, please "+"also include @tensorflow/tfjs on the page before using this\n        model.")}url=saved_models_1.mobileNetSavedModel(outputStride,multiplier,quantBytes);return[4,tfconv.loadGraphModel(config.modelUrl||url)];case 1:graphModel=_a.sent();mobilenet=new mobilenet_1.MobileNet(graphModel,outputStride);return[2,new BodyPix(mobilenet)]}})})}function loadResNet(config){return __awaiter(this,void 0,void 0,function(){var outputStride,quantBytes,url,graphModel,resnet;return __generator(this,function(_a){switch(_a.label){case 0:outputStride=config.outputStride;quantBytes=config.quantBytes;if(tf==null){throw new Error("Cannot find TensorFlow.js. If you are using a <script> tag, please "+"also include @tensorflow/tfjs on the page before using this\n        model.")}url=saved_models_1.resNet50SavedModel(outputStride,quantBytes);return[4,tfconv.loadGraphModel(config.modelUrl||url)];case 1:graphModel=_a.sent();resnet=new resnet_1.ResNet(graphModel,outputStride);return[2,new BodyPix(resnet)]}})})}function load(config){if(config===void 0){config=MOBILENET_V1_CONFIG}return __awaiter(this,void 0,void 0,function(){return __generator(this,function(_a){config=validateModelConfig(config);if(config.architecture==="ResNet50"){return[2,loadResNet(config)]}else if(config.architecture==="MobileNetV1"){return[2,loadMobileNet(config)]}else{return[2,null]}return[2]})})}exports.load=load},{"./decode_part_map":14,"./mobilenet":17,"./multi_person/decode_instance_masks":19,"./multi_person/decode_multiple_poses":22,"./resnet":28,"./saved_models":29,"./util":30,"@tensorflow/tfjs-converter":34,"@tensorflow/tfjs-core":35}],14:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.decodeOnlyPartSegmentation=exports.decodePartSegmentation=exports.toMaskTensor=void 0;var tf=require("@tensorflow/tfjs-core");function toFlattenedOneHotPartMap(partHeatmapScores){var numParts=partHeatmapScores.shape[2];var partMapLocations=tf.argMax(partHeatmapScores,2);var partMapFlattened=tf.reshape(partMapLocations,[-1]);return tf.oneHot(partMapFlattened,numParts)}function clipByMask2d(image,mask){return tf.mul(image,mask)}function toMaskTensor(segmentScores,threshold){return tf.tidy(function(){return tf.cast(tf.greater(segmentScores,tf.scalar(threshold)),"int32")})}exports.toMaskTensor=toMaskTensor;function decodePartSegmentation(segmentationMask,partHeatmapScores){var _a=partHeatmapScores.shape,partMapHeight=_a[0],partMapWidth=_a[1],numParts=_a[2];return tf.tidy(function(){var flattenedMap=toFlattenedOneHotPartMap(partHeatmapScores);var partNumbers=tf.expandDims(tf.range(0,numParts,1,"int32"),1);var partMapFlattened=tf.cast(tf.matMul(flattenedMap,partNumbers),"int32");var partMap=tf.reshape(partMapFlattened,[partMapHeight,partMapWidth]);var partMapShiftedUpForClipping=tf.add(partMap,tf.scalar(1,"int32"));return tf.sub(clipByMask2d(partMapShiftedUpForClipping,segmentationMask),tf.scalar(1,"int32"))})}exports.decodePartSegmentation=decodePartSegmentation;function decodeOnlyPartSegmentation(partHeatmapScores){var _a=partHeatmapScores.shape,partMapHeight=_a[0],partMapWidth=_a[1],numParts=_a[2];return tf.tidy(function(){var flattenedMap=toFlattenedOneHotPartMap(partHeatmapScores);var partNumbers=tf.expandDims(tf.range(0,numParts,1,"int32"),1);var partMapFlattened=tf.cast(tf.matMul(flattenedMap,partNumbers),"int32");return tf.reshape(partMapFlattened,[partMapHeight,partMapWidth])})}exports.decodeOnlyPartSegmentation=decodeOnlyPartSegmentation},{"@tensorflow/tfjs-core":35}],15:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var body_pix_model_1=require("./body_pix_model");Object.defineProperty(exports,"BodyPix",{enumerable:true,get:function(){return body_pix_model_1.BodyPix}});Object.defineProperty(exports,"load",{enumerable:true,get:function(){return body_pix_model_1.load}});var output_rendering_util_1=require("./output_rendering_util");Object.defineProperty(exports,"blurBodyPart",{enumerable:true,get:function(){return output_rendering_util_1.blurBodyPart}});Object.defineProperty(exports,"drawBokehEffect",{enumerable:true,get:function(){return output_rendering_util_1.drawBokehEffect}});Object.defineProperty(exports,"drawMask",{enumerable:true,get:function(){return output_rendering_util_1.drawMask}});Object.defineProperty(exports,"drawPixelatedMask",{enumerable:true,get:function(){return output_rendering_util_1.drawPixelatedMask}});Object.defineProperty(exports,"toColoredPartMask",{enumerable:true,get:function(){return output_rendering_util_1.toColoredPartMask}});Object.defineProperty(exports,"toMask",{enumerable:true,get:function(){return output_rendering_util_1.toMask}});var part_channels_1=require("./part_channels");Object.defineProperty(exports,"PART_CHANNELS",{enumerable:true,get:function(){return part_channels_1.PART_CHANNELS}});var util_1=require("./util");Object.defineProperty(exports,"flipPoseHorizontal",{enumerable:true,get:function(){return util_1.flipPoseHorizontal}});Object.defineProperty(exports,"resizeAndPadTo",{enumerable:true,get:function(){return util_1.resizeAndPadTo}});Object.defineProperty(exports,"scaleAndCropToInputTensorShape",{enumerable:true,get:function(){return util_1.scaleAndCropToInputTensorShape}});var version_1=require("./version");Object.defineProperty(exports,"version",{enumerable:true,get:function(){return version_1.version}})},{"./body_pix_model":13,"./output_rendering_util":26,"./part_channels":27,"./util":30,"./version":31}],16:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.CONNECTED_PART_INDICES=exports.POSE_CHAIN=exports.PART_IDS=exports.NUM_KEYPOINTS=exports.PART_NAMES=void 0;exports.PART_NAMES=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"];exports.NUM_KEYPOINTS=exports.PART_NAMES.length;exports.PART_IDS=exports.PART_NAMES.reduce(function(result,jointName,i){result[jointName]=i;return result},{});var CONNECTED_PART_NAMES=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]];exports.POSE_CHAIN=[["nose","leftEye"],["leftEye","leftEar"],["nose","rightEye"],["rightEye","rightEar"],["nose","leftShoulder"],["leftShoulder","leftElbow"],["leftElbow","leftWrist"],["leftShoulder","leftHip"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["nose","rightShoulder"],["rightShoulder","rightElbow"],["rightElbow","rightWrist"],["rightShoulder","rightHip"],["rightHip","rightKnee"],["rightKnee","rightAnkle"]];exports.CONNECTED_PART_INDICES=CONNECTED_PART_NAMES.map(function(_a){var jointNameA=_a[0],jointNameB=_a[1];return[exports.PART_IDS[jointNameA],exports.PART_IDS[jointNameB]]})},{}],17:[function(require,module,exports){"use strict";var __extends=this&&this.__extends||function(){var extendStatics=function(d,b){extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b}||function(d,b){for(var p in b)if(b.hasOwnProperty(p))d[p]=b[p]};return extendStatics(d,b)};return function(d,b){extendStatics(d,b);function __(){this.constructor=d}d.prototype=b===null?Object.create(b):(__.prototype=b.prototype,new __)}}();Object.defineProperty(exports,"__esModule",{value:true});exports.MobileNet=void 0;var tf=require("@tensorflow/tfjs-core");var base_model_1=require("./base_model");var MobileNet=function(_super){__extends(MobileNet,_super);function MobileNet(){return _super!==null&&_super.apply(this,arguments)||this}MobileNet.prototype.preprocessInput=function(input){return tf.tidy(function(){return tf.sub(tf.div(input,127.5),1)})};MobileNet.prototype.nameOutputResults=function(results){var offsets=results[0],segmentation=results[1],partHeatmaps=results[2],longOffsets=results[3],heatmap=results[4],displacementFwd=results[5],displacementBwd=results[6],partOffsets=results[7];return{offsets:offsets,segmentation:segmentation,partHeatmaps:partHeatmaps,longOffsets:longOffsets,heatmap:heatmap,displacementFwd:displacementFwd,displacementBwd:displacementBwd,partOffsets:partOffsets}};return MobileNet}(base_model_1.BaseModel);exports.MobileNet=MobileNet},{"./base_model":11,"@tensorflow/tfjs-core":35}],18:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.buildPartWithScoreQueue=void 0;var max_heap_1=require("./max_heap");function scoreIsMaximumInLocalWindow(keypointId,score,heatmapY,heatmapX,localMaximumRadius,scores){var _a=scores.shape,height=_a[0],width=_a[1];var localMaximum=true;var yStart=Math.max(heatmapY-localMaximumRadius,0);var yEnd=Math.min(heatmapY+localMaximumRadius+1,height);for(var yCurrent=yStart;yCurrent<yEnd;++yCurrent){var xStart=Math.max(heatmapX-localMaximumRadius,0);var xEnd=Math.min(heatmapX+localMaximumRadius+1,width);for(var xCurrent=xStart;xCurrent<xEnd;++xCurrent){if(scores.get(yCurrent,xCurrent,keypointId)>score){localMaximum=false;break}}if(!localMaximum){break}}return localMaximum}function buildPartWithScoreQueue(scoreThreshold,localMaximumRadius,scores){var _a=scores.shape,height=_a[0],width=_a[1],numKeypoints=_a[2];var queue=new max_heap_1.MaxHeap(height*width*numKeypoints,function(_a){var score=_a.score;return score});for(var heatmapY=0;heatmapY<height;++heatmapY){for(var heatmapX=0;heatmapX<width;++heatmapX){for(var keypointId=0;keypointId<numKeypoints;++keypointId){var score=scores.get(heatmapY,heatmapX,keypointId);if(score<scoreThreshold){continue}if(scoreIsMaximumInLocalWindow(keypointId,score,heatmapY,heatmapX,localMaximumRadius,scores)){queue.enqueue({score:score,part:{heatmapY:heatmapY,heatmapX:heatmapX,id:keypointId}})}}}}return queue}exports.buildPartWithScoreQueue=buildPartWithScoreQueue},{"./max_heap":24}],19:[function(require,module,exports){"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P(function(resolve){resolve(value)})}return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator["throw"](value))}catch(e){reject(e)}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})};var __generator=this&&this.__generator||function(thisArg,body){var _={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]},f,y,t,g;return g={next:verb(0),throw:verb(1),return:verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}};Object.defineProperty(exports,"__esModule",{value:true});exports.decodePersonInstancePartMasks=exports.decodePersonInstanceMasks=exports.toPersonKPartSegmentation=exports.toPersonKSegmentation=void 0;var tf=require("@tensorflow/tfjs-core");var tfjs_core_1=require("@tensorflow/tfjs-core");var decode_multiple_masks_cpu_1=require("./decode_multiple_masks_cpu");var decode_multiple_masks_webgl_1=require("./decode_multiple_masks_webgl");function toPersonKSegmentation(segmentation,k){return tf.tidy(function(){return tf.cast(tf.equal(segmentation,tf.scalar(k)),"int32")})}exports.toPersonKSegmentation=toPersonKSegmentation;function toPersonKPartSegmentation(segmentation,bodyParts,k){return tf.tidy(function(){return tf.sub(tf.mul(tf.cast(tf.equal(segmentation,tf.scalar(k)),"int32"),tf.add(bodyParts,1)),1)})}exports.toPersonKPartSegmentation=toPersonKPartSegmentation;function isWebGlBackend(){return tfjs_core_1.getBackend()==="webgl"}function decodePersonInstanceMasks(segmentation,longOffsets,poses,height,width,stride,_a,padding,minPoseScore,refineSteps,minKeypointScore,maxNumPeople){var inHeight=_a[0],inWidth=_a[1];if(minPoseScore===void 0){minPoseScore=.2}if(refineSteps===void 0){refineSteps=8}if(minKeypointScore===void 0){minKeypointScore=.3}if(maxNumPeople===void 0){maxNumPeople=10}return __awaiter(this,void 0,void 0,function(){var posesAboveScore,personSegmentationsData,personSegmentations,segmentationsData,longOffsetsData;return __generator(this,function(_b){switch(_b.label){case 0:posesAboveScore=poses.filter(function(pose){return pose.score>=minPoseScore});if(!isWebGlBackend())return[3,2];personSegmentations=tf.tidy(function(){var masksTensorInfo=decode_multiple_masks_webgl_1.decodeMultipleMasksWebGl(segmentation,longOffsets,posesAboveScore,height,width,stride,[inHeight,inWidth],padding,refineSteps,minKeypointScore,maxNumPeople);var masksTensor=tf.engine().makeTensorFromDataId(masksTensorInfo.dataId,masksTensorInfo.shape,masksTensorInfo.dtype);return posesAboveScore.map(function(_,k){return toPersonKSegmentation(masksTensor,k)})});return[4,Promise.all(personSegmentations.map(function(mask){return mask.data()}))];case 1:personSegmentationsData=_b.sent();personSegmentations.forEach(function(x){return x.dispose()});return[3,5];case 2:return[4,segmentation.data()];case 3:segmentationsData=_b.sent();return[4,longOffsets.data()];case 4:longOffsetsData=_b.sent();personSegmentationsData=decode_multiple_masks_cpu_1.decodeMultipleMasksCPU(segmentationsData,longOffsetsData,posesAboveScore,height,width,stride,[inHeight,inWidth],padding,refineSteps);_b.label=5;case 5:return[2,personSegmentationsData.map(function(data,i){return{data:data,pose:posesAboveScore[i],width:width,height:height}})]}})})}exports.decodePersonInstanceMasks=decodePersonInstanceMasks;function decodePersonInstancePartMasks(segmentation,longOffsets,partSegmentation,poses,height,width,stride,_a,padding,minPoseScore,refineSteps,minKeypointScore,maxNumPeople){var inHeight=_a[0],inWidth=_a[1];if(minPoseScore===void 0){minPoseScore=.2}if(refineSteps===void 0){refineSteps=8}if(minKeypointScore===void 0){minKeypointScore=.3}if(maxNumPeople===void 0){maxNumPeople=10}return __awaiter(this,void 0,void 0,function(){var posesAboveScore,partSegmentationsByPersonData,partSegmentations,segmentationsData,longOffsetsData,partSegmentaionData;return __generator(this,function(_b){switch(_b.label){case 0:posesAboveScore=poses.filter(function(pose){return pose.score>=minPoseScore});if(!isWebGlBackend())return[3,2];partSegmentations=tf.tidy(function(){var masksTensorInfo=decode_multiple_masks_webgl_1.decodeMultipleMasksWebGl(segmentation,longOffsets,posesAboveScore,height,width,stride,[inHeight,inWidth],padding,refineSteps,minKeypointScore,maxNumPeople);var masksTensor=tf.engine().makeTensorFromDataId(masksTensorInfo.dataId,masksTensorInfo.shape,masksTensorInfo.dtype);return posesAboveScore.map(function(_,k){return toPersonKPartSegmentation(masksTensor,partSegmentation,k)})});return[4,Promise.all(partSegmentations.map(function(x){return x.data()}))];case 1:partSegmentationsByPersonData=_b.sent();partSegmentations.forEach(function(x){return x.dispose()});return[3,6];case 2:return[4,segmentation.data()];case 3:segmentationsData=_b.sent();return[4,longOffsets.data()];case 4:longOffsetsData=_b.sent();return[4,partSegmentation.data()];case 5:partSegmentaionData=_b.sent();partSegmentationsByPersonData=decode_multiple_masks_cpu_1.decodeMultiplePartMasksCPU(segmentationsData,longOffsetsData,partSegmentaionData,posesAboveScore,height,width,stride,[inHeight,inWidth],padding,refineSteps);_b.label=6;case 6:return[2,partSegmentationsByPersonData.map(function(data,k){return{pose:posesAboveScore[k],data:data,height:height,width:width}})]}})})}exports.decodePersonInstancePartMasks=decodePersonInstancePartMasks},{"./decode_multiple_masks_cpu":20,"./decode_multiple_masks_webgl":21,"@tensorflow/tfjs-core":35}],20:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.decodeMultiplePartMasksCPU=exports.decodeMultipleMasksCPU=void 0;var keypoints_1=require("../keypoints");var util_1=require("./util");function computeDistance(embedding,pose,minPartScore){if(minPartScore===void 0){minPartScore=.3}var distance=0;var numKpt=0;for(var p=0;p<embedding.length;p++){if(pose.keypoints[p].score>minPartScore){numKpt+=1;distance+=Math.pow(embedding[p].x-pose.keypoints[p].position.x,2)+Math.pow(embedding[p].y-pose.keypoints[p].position.y,2)}}if(numKpt===0){distance=Infinity}else{distance=distance/numKpt}return distance}function convertToPositionInOuput(position,_a,_b,stride){var padT=_a[0],padL=_a[1];var scaleX=_b[0],scaleY=_b[1];var y=Math.round(((padT+position.y+1)*scaleY-1)/stride);var x=Math.round(((padL+position.x+1)*scaleX-1)/stride);return{x:x,y:y}}function getEmbedding(location,keypointIndex,convertToPosition,outputResolutionX,longOffsets,refineSteps,_a){var height=_a[0],width=_a[1];var newLocation=convertToPosition(location);var nn=newLocation.y*outputResolutionX+newLocation.x;var dy=longOffsets[keypoints_1.NUM_KEYPOINTS*(2*nn)+keypointIndex];var dx=longOffsets[keypoints_1.NUM_KEYPOINTS*(2*nn+1)+keypointIndex];var y=location.y+dy;var x=location.x+dx;for(var t=0;t<refineSteps;t++){y=Math.min(y,height-1);x=Math.min(x,width-1);var newPos=convertToPosition({x:x,y:y});var nn_1=newPos.y*outputResolutionX+newPos.x;dy=longOffsets[keypoints_1.NUM_KEYPOINTS*(2*nn_1)+keypointIndex];dx=longOffsets[keypoints_1.NUM_KEYPOINTS*(2*nn_1+1)+keypointIndex];y=y+dy;x=x+dx}return{x:x,y:y}}function matchEmbeddingToInstance(location,longOffsets,poses,numKptForMatching,_a,_b,outputResolutionX,_c,stride,refineSteps){var padT=_a[0],padL=_a[1];var scaleX=_b[0],scaleY=_b[1];var height=_c[0],width=_c[1];var embed=[];var convertToPosition=function(pair){return convertToPositionInOuput(pair,[padT,padL],[scaleX,scaleY],stride)};for(var keypointsIndex=0;keypointsIndex<numKptForMatching;keypointsIndex++){var embedding=getEmbedding(location,keypointsIndex,convertToPosition,outputResolutionX,longOffsets,refineSteps,[height,width]);embed.push(embedding)}var kMin=-1;var kMinDist=Infinity;for(var k=0;k<poses.length;k++){var dist=computeDistance(embed,poses[k]);if(dist<kMinDist){kMin=k;kMinDist=dist}}return kMin}function getOutputResolution(_a,stride){var inputResolutionY=_a[0],inputResolutionX=_a[1];var outputResolutionX=Math.round((inputResolutionX-1)/stride+1);var outputResolutionY=Math.round((inputResolutionY-1)/stride+1);return[outputResolutionX,outputResolutionY]}function decodeMultipleMasksCPU(segmentation,longOffsets,posesAboveScore,height,width,stride,_a,padding,refineSteps,numKptForMatching){var inHeight=_a[0],inWidth=_a[1];if(numKptForMatching===void 0){numKptForMatching=5}var dataArrays=posesAboveScore.map(function(x){return new Uint8Array(height*width).fill(0)});var padT=padding.top,padL=padding.left;var _b=util_1.getScale([height,width],[inHeight,inWidth],padding),scaleX=_b[0],scaleY=_b[1];var outputResolutionX=getOutputResolution([inHeight,inWidth],stride)[0];for(var i=0;i<height;i+=1){for(var j=0;j<width;j+=1){var n=i*width+j;var prob=segmentation[n];if(prob===1){var kMin=matchEmbeddingToInstance({x:j,y:i},longOffsets,posesAboveScore,numKptForMatching,[padT,padL],[scaleX,scaleY],outputResolutionX,[height,width],stride,refineSteps);if(kMin>=0){dataArrays[kMin][n]=1}}}}return dataArrays}exports.decodeMultipleMasksCPU=decodeMultipleMasksCPU;function decodeMultiplePartMasksCPU(segmentation,longOffsets,partSegmentaion,posesAboveScore,height,width,stride,_a,padding,refineSteps,numKptForMatching){var inHeight=_a[0],inWidth=_a[1];if(numKptForMatching===void 0){numKptForMatching=5}var dataArrays=posesAboveScore.map(function(x){return new Int32Array(height*width).fill(-1)});var padT=padding.top,padL=padding.left;var _b=util_1.getScale([height,width],[inHeight,inWidth],padding),scaleX=_b[0],scaleY=_b[1];var outputResolutionX=getOutputResolution([inHeight,inWidth],stride)[0];for(var i=0;i<height;i+=1){for(var j=0;j<width;j+=1){var n=i*width+j;var prob=segmentation[n];if(prob===1){var kMin=matchEmbeddingToInstance({x:j,y:i},longOffsets,posesAboveScore,numKptForMatching,[padT,padL],[scaleX,scaleY],outputResolutionX,[height,width],stride,refineSteps);if(kMin>=0){dataArrays[kMin][n]=partSegmentaion[n]}}}}return dataArrays}exports.decodeMultiplePartMasksCPU=decodeMultiplePartMasksCPU},{"../keypoints":16,"./util":25}],21:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.decodeMultipleMasksWebGl=void 0;var tf=require("@tensorflow/tfjs-core");var keypoints_1=require("../keypoints");var util_1=require("./util");function decodeMultipleMasksWebGl(segmentation,longOffsets,posesAboveScore,height,width,stride,_a,padding,refineSteps,minKptScore,maxNumPeople){var inHeight=_a[0],inWidth=_a[1];var _b=segmentation.shape,origHeight=_b[0],origWidth=_b[1];var _c=longOffsets.shape.slice(0,2),outHeight=_c[0],outWidth=_c[1];var shapedLongOffsets=tf.reshape(longOffsets,[outHeight,outWidth,2,keypoints_1.NUM_KEYPOINTS]);var poseVals=new Float32Array(maxNumPeople*keypoints_1.NUM_KEYPOINTS*3).fill(0);for(var i=0;i<posesAboveScore.length;i++){var poseOffset=i*keypoints_1.NUM_KEYPOINTS*3;var pose=posesAboveScore[i];for(var kp=0;kp<keypoints_1.NUM_KEYPOINTS;kp++){var keypoint=pose.keypoints[kp];var offset=poseOffset+kp*3;poseVals[offset]=keypoint.score;poseVals[offset+1]=keypoint.position.y;poseVals[offset+2]=keypoint.position.x}}var _d=util_1.getScale([height,width],[inHeight,inWidth],padding),scaleX=_d[0],scaleY=_d[1];var posesTensor=tf.tensor(poseVals,[maxNumPeople,keypoints_1.NUM_KEYPOINTS,3]);var padT=padding.top,padL=padding.left;var program={variableNames:["segmentation","longOffsets","poses"],outputShape:[origHeight,origWidth],userCode:"\n    int convertToPositionInOutput(int pos, int pad, float scale, int stride) {\n      return round(((float(pos + pad) + 1.0) * scale - 1.0) / float(stride));\n    }\n\n    float convertToPositionInOutputFloat(\n        int pos, int pad, float scale, int stride) {\n      return ((float(pos + pad) + 1.0) * scale - 1.0) / float(stride);\n    }\n\n    float dist(float x1, float y1, float x2, float y2) {\n      return pow(x1 - x2, 2.0) + pow(y1 - y2, 2.0);\n    }\n\n    float sampleLongOffsets(float h, float w, int d, int k) {\n      float fh = fract(h);\n      float fw = fract(w);\n      int clH = int(ceil(h));\n      int clW = int(ceil(w));\n      int flH = int(floor(h));\n      int flW = int(floor(w));\n      float o11 = getLongOffsets(flH, flW, d, k);\n      float o12 = getLongOffsets(flH, clW, d, k);\n      float o21 = getLongOffsets(clH, flW, d, k);\n      float o22 = getLongOffsets(clH, clW, d, k);\n      float o1 = mix(o11, o12, fw);\n      float o2 = mix(o21, o22, fw);\n      return mix(o1, o2, fh);\n    }\n\n    int findNearestPose(int h, int w) {\n      float prob = getSegmentation(h, w);\n      if (prob < 1.0) {\n        return -1;\n      }\n\n      // Done(Tyler): convert from output space h/w to strided space.\n      float stridedH = convertToPositionInOutputFloat(\n        h, "+padT+", "+scaleY+", "+stride+");\n      float stridedW = convertToPositionInOutputFloat(\n        w, "+padL+", "+scaleX+", "+stride+");\n\n      float minDist = 1000000.0;\n      int iMin = -1;\n      for (int i = 0; i < "+maxNumPeople+"; i++) {\n        float curDistSum = 0.0;\n        int numKpt = 0;\n        for (int k = 0; k < "+keypoints_1.NUM_KEYPOINTS+"; k++) {\n          float dy = sampleLongOffsets(stridedH, stridedW, 0, k);\n          float dx = sampleLongOffsets(stridedH, stridedW, 1, k);\n\n          float y = float(h) + dy;\n          float x = float(w) + dx;\n\n          for (int s = 0; s < "+refineSteps+"; s++) {\n            int yRounded = round(min(y, float("+(height-1)+")));\n            int xRounded = round(min(x, float("+(width-1)+")));\n\n            float yStrided = convertToPositionInOutputFloat(\n              yRounded, "+padT+", "+scaleY+", "+stride+");\n            float xStrided = convertToPositionInOutputFloat(\n              xRounded, "+padL+", "+scaleX+", "+stride+");\n\n            float dy = sampleLongOffsets(yStrided, xStrided, 0, k);\n            float dx = sampleLongOffsets(yStrided, xStrided, 1, k);\n\n            y = y + dy;\n            x = x + dx;\n          }\n\n          float poseScore = getPoses(i, k, 0);\n          float poseY = getPoses(i, k, 1);\n          float poseX = getPoses(i, k, 2);\n          if (poseScore > "+minKptScore+") {\n            numKpt = numKpt + 1;\n            curDistSum = curDistSum + dist(x, y, poseX, poseY);\n          }\n        }\n        if (numKpt > 0 && curDistSum / float(numKpt) < minDist) {\n          minDist = curDistSum / float(numKpt);\n          iMin = i;\n        }\n      }\n      return iMin;\n    }\n\n    void main() {\n        ivec2 coords = getOutputCoords();\n        int nearestPose = findNearestPose(coords[0], coords[1]);\n        setOutput(float(nearestPose));\n      }\n  "};var webglBackend=tf.backend();return webglBackend.compileAndRun(program,[segmentation,shapedLongOffsets,posesTensor])}exports.decodeMultipleMasksWebGl=decodeMultipleMasksWebGl},{"../keypoints":16,"./util":25,"@tensorflow/tfjs-core":35}],22:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.decodeMultiplePoses=void 0;var build_part_with_score_queue_1=require("./build_part_with_score_queue");var decode_pose_1=require("./decode_pose");var util_1=require("./util");function withinNmsRadiusOfCorrespondingPoint(poses,squaredNmsRadius,_a,keypointId){var x=_a.x,y=_a.y;return poses.some(function(_a){var keypoints=_a.keypoints;var correspondingKeypoint=keypoints[keypointId].position;return util_1.squaredDistance(y,x,correspondingKeypoint.y,correspondingKeypoint.x)<=squaredNmsRadius})}function getInstanceScore(existingPoses,squaredNmsRadius,instanceKeypoints){var notOverlappedKeypointScores=instanceKeypoints.reduce(function(result,_a,keypointId){var position=_a.position,score=_a.score;if(!withinNmsRadiusOfCorrespondingPoint(existingPoses,squaredNmsRadius,position,keypointId)){result+=score}return result},0);return notOverlappedKeypointScores/=instanceKeypoints.length}var kLocalMaximumRadius=1;function decodeMultiplePoses(scoresBuffer,offsetsBuffer,displacementsFwdBuffer,displacementsBwdBuffer,outputStride,maxPoseDetections,scoreThreshold,nmsRadius){if(scoreThreshold===void 0){scoreThreshold=.5}if(nmsRadius===void 0){nmsRadius=20}var poses=[];var queue=build_part_with_score_queue_1.buildPartWithScoreQueue(scoreThreshold,kLocalMaximumRadius,scoresBuffer);var squaredNmsRadius=nmsRadius*nmsRadius;while(poses.length<maxPoseDetections&&!queue.empty()){var root=queue.dequeue();var rootImageCoords=util_1.getImageCoords(root.part,outputStride,offsetsBuffer);if(withinNmsRadiusOfCorrespondingPoint(poses,squaredNmsRadius,rootImageCoords,root.part.id)){continue}var keypoints=decode_pose_1.decodePose(root,scoresBuffer,offsetsBuffer,outputStride,displacementsFwdBuffer,displacementsBwdBuffer);var score=getInstanceScore(poses,squaredNmsRadius,keypoints);poses.push({keypoints:keypoints,score:score})}return poses}exports.decodeMultiplePoses=decodeMultiplePoses},{"./build_part_with_score_queue":18,"./decode_pose":23,"./util":25}],23:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.decodePose=void 0;var keypoints_1=require("../keypoints");var util_1=require("./util");var util_2=require("./util");var parentChildrenTuples=keypoints_1.POSE_CHAIN.map(function(_a){var parentJoinName=_a[0],childJoinName=_a[1];return[keypoints_1.PART_IDS[parentJoinName],keypoints_1.PART_IDS[childJoinName]]});var parentToChildEdges=parentChildrenTuples.map(function(_a){var childJointId=_a[1];return childJointId});var childToParentEdges=parentChildrenTuples.map(function(_a){var parentJointId=_a[0];return parentJointId});function getDisplacement(edgeId,point,displacements){var numEdges=displacements.shape[2]/2;return{y:displacements.get(point.y,point.x,edgeId),x:displacements.get(point.y,point.x,numEdges+edgeId)}}function getStridedIndexNearPoint(point,outputStride,height,width){return{y:util_1.clamp(Math.round(point.y/outputStride),0,height-1),x:util_1.clamp(Math.round(point.x/outputStride),0,width-1)}}function traverseToTargetKeypoint(edgeId,sourceKeypoint,targetKeypointId,scoresBuffer,offsets,outputStride,displacements,offsetRefineStep){if(offsetRefineStep===void 0){offsetRefineStep=2}var _a=scoresBuffer.shape,height=_a[0],width=_a[1];var sourceKeypointIndices=getStridedIndexNearPoint(sourceKeypoint.position,outputStride,height,width);var displacement=getDisplacement(edgeId,sourceKeypointIndices,displacements);var displacedPoint=util_2.addVectors(sourceKeypoint.position,displacement);var targetKeypoint=displacedPoint;for(var i=0;i<offsetRefineStep;i++){var targetKeypointIndices=getStridedIndexNearPoint(targetKeypoint,outputStride,height,width);var offsetPoint=util_1.getOffsetPoint(targetKeypointIndices.y,targetKeypointIndices.x,targetKeypointId,offsets);targetKeypoint=util_2.addVectors({x:targetKeypointIndices.x*outputStride,y:targetKeypointIndices.y*outputStride},{x:offsetPoint.x,y:offsetPoint.y})}var targetKeyPointIndices=getStridedIndexNearPoint(targetKeypoint,outputStride,height,width);var score=scoresBuffer.get(targetKeyPointIndices.y,targetKeyPointIndices.x,targetKeypointId);return{position:targetKeypoint,part:keypoints_1.PART_NAMES[targetKeypointId],score:score}}function decodePose(root,scores,offsets,outputStride,displacementsFwd,displacementsBwd){var numParts=scores.shape[2];var numEdges=parentToChildEdges.length;var instanceKeypoints=new Array(numParts);var rootPart=root.part,rootScore=root.score;var rootPoint=util_2.getImageCoords(rootPart,outputStride,offsets);instanceKeypoints[rootPart.id]={score:rootScore,part:keypoints_1.PART_NAMES[rootPart.id],position:rootPoint};for(var edge=numEdges-1;edge>=0;--edge){var sourceKeypointId=parentToChildEdges[edge];var targetKeypointId=childToParentEdges[edge];if(instanceKeypoints[sourceKeypointId]&&!instanceKeypoints[targetKeypointId]){instanceKeypoints[targetKeypointId]=traverseToTargetKeypoint(edge,instanceKeypoints[sourceKeypointId],targetKeypointId,scores,offsets,outputStride,displacementsBwd)}}for(var edge=0;edge<numEdges;++edge){var sourceKeypointId=childToParentEdges[edge];var targetKeypointId=parentToChildEdges[edge];if(instanceKeypoints[sourceKeypointId]&&!instanceKeypoints[targetKeypointId]){instanceKeypoints[targetKeypointId]=traverseToTargetKeypoint(edge,instanceKeypoints[sourceKeypointId],targetKeypointId,scores,offsets,outputStride,displacementsFwd)}}return instanceKeypoints}exports.decodePose=decodePose},{"../keypoints":16,"./util":25}],24:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.MaxHeap=void 0;function half(k){return Math.floor(k/2)}var MaxHeap=function(){function MaxHeap(maxSize,getElementValue){this.priorityQueue=new Array(maxSize);this.numberOfElements=-1;this.getElementValue=getElementValue}MaxHeap.prototype.enqueue=function(x){this.priorityQueue[++this.numberOfElements]=x;this.swim(this.numberOfElements)};MaxHeap.prototype.dequeue=function(){var max=this.priorityQueue[0];this.exchange(0,this.numberOfElements--);this.sink(0);this.priorityQueue[this.numberOfElements+1]=null;return max};MaxHeap.prototype.empty=function(){return this.numberOfElements===-1};MaxHeap.prototype.size=function(){return this.numberOfElements+1};MaxHeap.prototype.all=function(){return this.priorityQueue.slice(0,this.numberOfElements+1)};MaxHeap.prototype.max=function(){return this.priorityQueue[0]};MaxHeap.prototype.swim=function(k){while(k>0&&this.less(half(k),k)){this.exchange(k,half(k));k=half(k)}};MaxHeap.prototype.sink=function(k){while(2*k<=this.numberOfElements){var j=2*k;if(j<this.numberOfElements&&this.less(j,j+1)){j++}if(!this.less(k,j)){break}this.exchange(k,j);k=j}};MaxHeap.prototype.getValueAt=function(i){return this.getElementValue(this.priorityQueue[i])};MaxHeap.prototype.less=function(i,j){return this.getValueAt(i)<this.getValueAt(j)};MaxHeap.prototype.exchange=function(i,j){var t=this.priorityQueue[i];this.priorityQueue[i]=this.priorityQueue[j];this.priorityQueue[j]=t};return MaxHeap}();exports.MaxHeap=MaxHeap},{}],25:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.clampVector=exports.addVectors=exports.squaredDistance=exports.clamp=exports.fillArray=exports.getImageCoords=exports.getOffsetPoint=exports.getScale=void 0;var keypoints_1=require("../keypoints");function getScale(_a,_b,padding){var height=_a[0],width=_a[1];var inputResolutionY=_b[0],inputResolutionX=_b[1];var padT=padding.top,padB=padding.bottom,padL=padding.left,padR=padding.right;var scaleY=inputResolutionY/(padT+padB+height);var scaleX=inputResolutionX/(padL+padR+width);return[scaleX,scaleY]}exports.getScale=getScale;function getOffsetPoint(y,x,keypoint,offsets){return{y:offsets.get(y,x,keypoint),x:offsets.get(y,x,keypoint+keypoints_1.NUM_KEYPOINTS)}}exports.getOffsetPoint=getOffsetPoint;function getImageCoords(part,outputStride,offsets){var heatmapY=part.heatmapY,heatmapX=part.heatmapX,keypoint=part.id;var _a=getOffsetPoint(heatmapY,heatmapX,keypoint,offsets),y=_a.y,x=_a.x;return{x:part.heatmapX*outputStride+x,y:part.heatmapY*outputStride+y}}exports.getImageCoords=getImageCoords;function fillArray(element,size){var result=new Array(size);for(var i=0;i<size;i++){result[i]=element}return result}exports.fillArray=fillArray;function clamp(a,min,max){if(a<min){return min}if(a>max){return max}return a}exports.clamp=clamp;function squaredDistance(y1,x1,y2,x2){var dy=y2-y1;var dx=x2-x1;return dy*dy+dx*dx}exports.squaredDistance=squaredDistance;function addVectors(a,b){return{x:a.x+b.x,y:a.y+b.y}}exports.addVectors=addVectors;function clampVector(a,min,max){return{y:clamp(a.y,min,max),x:clamp(a.x,min,max)}}exports.clampVector=clampVector},{"../keypoints":16}],26:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.blurBodyPart=exports.drawBokehEffect=exports.drawPixelatedMask=exports.drawMask=exports.toColoredPartMask=exports.toMask=void 0;var blur_1=require("./blur");var util_1=require("./util");var offScreenCanvases={};function isSafari(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}function assertSameDimensions(_a,_b,nameA,nameB){var widthA=_a.width,heightA=_a.height;var widthB=_b.width,heightB=_b.height;if(widthA!==widthB||heightA!==heightB){throw new Error("error: dimensions must match. "+nameA+" has dimensions "+widthA+"x"+heightA+", "+nameB+" has dimensions "+widthB+"x"+heightB)}}function flipCanvasHorizontal(canvas){var ctx=canvas.getContext("2d");ctx.scale(-1,1);ctx.translate(-canvas.width,0)}function drawWithCompositing(ctx,image,compositeOperation){ctx.globalCompositeOperation=compositeOperation;ctx.drawImage(image,0,0)}function createOffScreenCanvas(){if(typeof document!=="undefined"){return document.createElement("canvas")}else if(typeof OffscreenCanvas!=="undefined"){return new OffscreenCanvas(0,0)}else{throw new Error("Cannot create a canvas in this context")}}function ensureOffscreenCanvasCreated(id){if(!offScreenCanvases[id]){offScreenCanvases[id]=createOffScreenCanvas()}return offScreenCanvases[id]}function drawAndBlurImageOnCanvas(image,blurAmount,canvas){var height=image.height,width=image.width;var ctx=canvas.getContext("2d");canvas.width=width;canvas.height=height;ctx.clearRect(0,0,width,height);ctx.save();if(isSafari()){blur_1.cpuBlur(canvas,image,blurAmount)}else{ctx.filter="blur("+blurAmount+"px)";ctx.drawImage(image,0,0,width,height)}ctx.restore()}function drawAndBlurImageOnOffScreenCanvas(image,blurAmount,offscreenCanvasName){var canvas=ensureOffscreenCanvasCreated(offscreenCanvasName);if(blurAmount===0){renderImageToCanvas(image,canvas)}else{drawAndBlurImageOnCanvas(image,blurAmount,canvas)}return canvas}function renderImageToCanvas(image,canvas){var width=image.width,height=image.height;canvas.width=width;canvas.height=height;var ctx=canvas.getContext("2d");ctx.drawImage(image,0,0,width,height)}function renderImageDataToCanvas(image,canvas){canvas.width=image.width;canvas.height=image.height;var ctx=canvas.getContext("2d");ctx.putImageData(image,0,0)}function renderImageDataToOffScreenCanvas(image,canvasName){var canvas=ensureOffscreenCanvasCreated(canvasName);renderImageDataToCanvas(image,canvas);return canvas}function toMask(personOrPartSegmentation,foreground,background,drawContour,foregroundIds){if(foreground===void 0){foreground={r:0,g:0,b:0,a:0}}if(background===void 0){background={r:0,g:0,b:0,a:255}}if(drawContour===void 0){drawContour=false}if(foregroundIds===void 0){foregroundIds=[1]}if(Array.isArray(personOrPartSegmentation)&&personOrPartSegmentation.length===0){return null}var multiPersonOrPartSegmentation;if(!Array.isArray(personOrPartSegmentation)){multiPersonOrPartSegmentation=[personOrPartSegmentation]}else{multiPersonOrPartSegmentation=personOrPartSegmentation}var _a=multiPersonOrPartSegmentation[0],width=_a.width,height=_a.height;var bytes=new Uint8ClampedArray(width*height*4);function drawStroke(bytes,row,column,width,radius,color){if(color===void 0){color={r:0,g:255,b:255,a:255}}for(var i=-radius;i<=radius;i++){for(var j=-radius;j<=radius;j++){if(i!==0&&j!==0){var n=(row+i)*width+(column+j);bytes[4*n+0]=color.r;bytes[4*n+1]=color.g;bytes[4*n+2]=color.b;bytes[4*n+3]=color.a}}}}function isSegmentationBoundary(segmentationData,row,column,width,foregroundIds,radius){if(foregroundIds===void 0){foregroundIds=[1]}if(radius===void 0){radius=1}var numberBackgroundPixels=0;for(var i=-radius;i<=radius;i++){var _loop_2=function(j){if(i!==0&&j!==0){var n_1=(row+i)*width+(column+j);if(!foregroundIds.some(function(id){return id===segmentationData[n_1]})){numberBackgroundPixels+=1}}};for(var j=-radius;j<=radius;j++){_loop_2(j)}}return numberBackgroundPixels>0}for(var i=0;i<height;i+=1){var _loop_1=function(j){var n=i*width+j;bytes[4*n+0]=background.r;bytes[4*n+1]=background.g;bytes[4*n+2]=background.b;bytes[4*n+3]=background.a;var _loop_3=function(k){if(foregroundIds.some(function(id){return id===multiPersonOrPartSegmentation[k].data[n]})){bytes[4*n]=foreground.r;bytes[4*n+1]=foreground.g;bytes[4*n+2]=foreground.b;bytes[4*n+3]=foreground.a;var isBoundary=isSegmentationBoundary(multiPersonOrPartSegmentation[k].data,i,j,width,foregroundIds);if(drawContour&&i-1>=0&&i+1<height&&j-1>=0&&j+1<width&&isBoundary){drawStroke(bytes,i,j,width,1)}}};for(var k=0;k<multiPersonOrPartSegmentation.length;k++){_loop_3(k)}};for(var j=0;j<width;j+=1){_loop_1(j)}}return new ImageData(bytes,width,height)}exports.toMask=toMask;var RAINBOW_PART_COLORS=[[110,64,170],[143,61,178],[178,60,178],[210,62,167],[238,67,149],[255,78,125],[255,94,99],[255,115,75],[255,140,56],[239,167,47],[217,194,49],[194,219,64],[175,240,91],[135,245,87],[96,247,96],[64,243,115],[40,234,141],[28,219,169],[26,199,194],[33,176,213],[47,150,224],[65,125,224],[84,101,214],[99,81,195]];function toColoredPartMask(partSegmentation,partColors){if(partColors===void 0){partColors=RAINBOW_PART_COLORS}if(Array.isArray(partSegmentation)&&partSegmentation.length===0){return null}var multiPersonPartSegmentation;if(!Array.isArray(partSegmentation)){multiPersonPartSegmentation=[partSegmentation]}else{multiPersonPartSegmentation=partSegmentation}var _a=multiPersonPartSegmentation[0],width=_a.width,height=_a.height;var bytes=new Uint8ClampedArray(width*height*4);for(var i=0;i<height*width;++i){var j=i*4;bytes[j+0]=255;bytes[j+1]=255;bytes[j+2]=255;bytes[j+3]=255;for(var k=0;k<multiPersonPartSegmentation.length;k++){var partId=multiPersonPartSegmentation[k].data[i];if(partId!==-1){var color=partColors[partId];if(!color){throw new Error("No color could be found for part id "+partId)}bytes[j+0]=color[0];bytes[j+1]=color[1];bytes[j+2]=color[2];bytes[j+3]=255}}}return new ImageData(bytes,width,height)}exports.toColoredPartMask=toColoredPartMask;var CANVAS_NAMES={blurred:"blurred",blurredMask:"blurred-mask",mask:"mask",lowresPartMask:"lowres-part-mask"};function drawMask(canvas,image,maskImage,maskOpacity,maskBlurAmount,flipHorizontal){if(maskOpacity===void 0){maskOpacity=.7}if(maskBlurAmount===void 0){maskBlurAmount=0}if(flipHorizontal===void 0){flipHorizontal=false}var _a=util_1.getInputSize(image),height=_a[0],width=_a[1];canvas.width=width;canvas.height=height;var ctx=canvas.getContext("2d");ctx.save();if(flipHorizontal){flipCanvasHorizontal(canvas)}ctx.drawImage(image,0,0);ctx.globalAlpha=maskOpacity;if(maskImage){assertSameDimensions({width:width,height:height},maskImage,"image","mask");var mask=renderImageDataToOffScreenCanvas(maskImage,CANVAS_NAMES.mask);var blurredMask=drawAndBlurImageOnOffScreenCanvas(mask,maskBlurAmount,CANVAS_NAMES.blurredMask);ctx.drawImage(blurredMask,0,0,width,height)}ctx.restore()}exports.drawMask=drawMask;function drawPixelatedMask(canvas,image,maskImage,maskOpacity,maskBlurAmount,flipHorizontal,pixelCellWidth){if(maskOpacity===void 0){maskOpacity=.7}if(maskBlurAmount===void 0){maskBlurAmount=0}if(flipHorizontal===void 0){flipHorizontal=false}if(pixelCellWidth===void 0){pixelCellWidth=10}var _a=util_1.getInputSize(image),height=_a[0],width=_a[1];assertSameDimensions({width:width,height:height},maskImage,"image","mask");var mask=renderImageDataToOffScreenCanvas(maskImage,CANVAS_NAMES.mask);var blurredMask=drawAndBlurImageOnOffScreenCanvas(mask,maskBlurAmount,CANVAS_NAMES.blurredMask);canvas.width=blurredMask.width;canvas.height=blurredMask.height;var ctx=canvas.getContext("2d");ctx.save();if(flipHorizontal){flipCanvasHorizontal(canvas)}var offscreenCanvas=ensureOffscreenCanvasCreated(CANVAS_NAMES.lowresPartMask);var offscreenCanvasCtx=offscreenCanvas.getContext("2d");offscreenCanvas.width=blurredMask.width*(1/pixelCellWidth);offscreenCanvas.height=blurredMask.height*(1/pixelCellWidth);offscreenCanvasCtx.drawImage(blurredMask,0,0,blurredMask.width,blurredMask.height,0,0,offscreenCanvas.width,offscreenCanvas.height);ctx.imageSmoothingEnabled=false;ctx.drawImage(offscreenCanvas,0,0,offscreenCanvas.width,offscreenCanvas.height,0,0,canvas.width,canvas.height);for(var i=0;i<offscreenCanvas.width;i++){ctx.beginPath();ctx.strokeStyle="#ffffff";ctx.moveTo(pixelCellWidth*i,0);ctx.lineTo(pixelCellWidth*i,canvas.height);ctx.stroke()}for(var i=0;i<offscreenCanvas.height;i++){ctx.beginPath();ctx.strokeStyle="#ffffff";ctx.moveTo(0,pixelCellWidth*i);ctx.lineTo(canvas.width,pixelCellWidth*i);ctx.stroke()}ctx.globalAlpha=1-maskOpacity;ctx.drawImage(image,0,0,blurredMask.width,blurredMask.height);ctx.restore()}exports.drawPixelatedMask=drawPixelatedMask;function createPersonMask(multiPersonSegmentation,edgeBlurAmount){var backgroundMaskImage=toMask(multiPersonSegmentation,{r:0,g:0,b:0,a:255},{r:0,g:0,b:0,a:0});var backgroundMask=renderImageDataToOffScreenCanvas(backgroundMaskImage,CANVAS_NAMES.mask);if(edgeBlurAmount===0){return backgroundMask}else{return drawAndBlurImageOnOffScreenCanvas(backgroundMask,edgeBlurAmount,CANVAS_NAMES.blurredMask)}}function drawBokehEffect(canvas,image,multiPersonSegmentation,backgroundBlurAmount,edgeBlurAmount,flipHorizontal){if(backgroundBlurAmount===void 0){backgroundBlurAmount=3}if(edgeBlurAmount===void 0){edgeBlurAmount=3}if(flipHorizontal===void 0){flipHorizontal=false}var blurredImage=drawAndBlurImageOnOffScreenCanvas(image,backgroundBlurAmount,CANVAS_NAMES.blurred);canvas.width=blurredImage.width;canvas.height=blurredImage.height;var ctx=canvas.getContext("2d");if(Array.isArray(multiPersonSegmentation)&&multiPersonSegmentation.length===0){ctx.drawImage(blurredImage,0,0);return}var personMask=createPersonMask(multiPersonSegmentation,edgeBlurAmount);ctx.save();if(flipHorizontal){flipCanvasHorizontal(canvas)}var _a=util_1.getInputSize(image),height=_a[0],width=_a[1];ctx.drawImage(image,0,0,width,height);drawWithCompositing(ctx,personMask,"destination-in");drawWithCompositing(ctx,blurredImage,"destination-over");ctx.restore()}exports.drawBokehEffect=drawBokehEffect;function createBodyPartMask(multiPersonPartSegmentation,bodyPartIdsToMask,edgeBlurAmount){var backgroundMaskImage=toMask(multiPersonPartSegmentation,{r:0,g:0,b:0,a:0},{r:0,g:0,b:0,a:255},true,bodyPartIdsToMask);var backgroundMask=renderImageDataToOffScreenCanvas(backgroundMaskImage,CANVAS_NAMES.mask);if(edgeBlurAmount===0){return backgroundMask}else{return drawAndBlurImageOnOffScreenCanvas(backgroundMask,edgeBlurAmount,CANVAS_NAMES.blurredMask)}}function blurBodyPart(canvas,image,partSegmentation,bodyPartIdsToBlur,backgroundBlurAmount,edgeBlurAmount,flipHorizontal){if(bodyPartIdsToBlur===void 0){bodyPartIdsToBlur=[0,1]}if(backgroundBlurAmount===void 0){backgroundBlurAmount=3}if(edgeBlurAmount===void 0){edgeBlurAmount=3}if(flipHorizontal===void 0){flipHorizontal=false}var blurredImage=drawAndBlurImageOnOffScreenCanvas(image,backgroundBlurAmount,CANVAS_NAMES.blurred);canvas.width=blurredImage.width;canvas.height=blurredImage.height;var ctx=canvas.getContext("2d");if(Array.isArray(partSegmentation)&&partSegmentation.length===0){ctx.drawImage(blurredImage,0,0);return}var bodyPartMask=createBodyPartMask(partSegmentation,bodyPartIdsToBlur,edgeBlurAmount);ctx.save();if(flipHorizontal){flipCanvasHorizontal(canvas)}var _a=util_1.getInputSize(image),height=_a[0],width=_a[1];ctx.drawImage(image,0,0,width,height);drawWithCompositing(ctx,bodyPartMask,"destination-in");drawWithCompositing(ctx,blurredImage,"destination-over");ctx.restore()}exports.blurBodyPart=blurBodyPart},{"./blur":12,"./util":30}],27:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.PART_CHANNELS=void 0;exports.PART_CHANNELS=["left_face","right_face","left_upper_arm_front","left_upper_arm_back","right_upper_arm_front","right_upper_arm_back","left_lower_arm_front","left_lower_arm_back","right_lower_arm_front","right_lower_arm_back","left_hand","right_hand","torso_front","torso_back","left_upper_leg_front","left_upper_leg_back","right_upper_leg_front","right_upper_leg_back","left_lower_leg_front","left_lower_leg_back","right_lower_leg_front","right_lower_leg_back","left_feet","right_feet"]},{}],28:[function(require,module,exports){"use strict";var __extends=this&&this.__extends||function(){var extendStatics=function(d,b){extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b}||function(d,b){for(var p in b)if(b.hasOwnProperty(p))d[p]=b[p]};return extendStatics(d,b)};return function(d,b){extendStatics(d,b);function __(){this.constructor=d}d.prototype=b===null?Object.create(b):(__.prototype=b.prototype,new __)}}();Object.defineProperty(exports,"__esModule",{value:true});exports.ResNet=void 0;var tf=require("@tensorflow/tfjs-core");var base_model_1=require("./base_model");var imageNetMean=[-123.15,-115.9,-103.06];var ResNet=function(_super){__extends(ResNet,_super);function ResNet(){return _super!==null&&_super.apply(this,arguments)||this}ResNet.prototype.preprocessInput=function(input){return tf.add(input,imageNetMean)};ResNet.prototype.nameOutputResults=function(results){var displacementBwd=results[0],displacementFwd=results[1],heatmap=results[2],longOffsets=results[3],offsets=results[4],partHeatmaps=results[5],segmentation=results[6],partOffsets=results[7];return{offsets:offsets,segmentation:segmentation,partHeatmaps:partHeatmaps,longOffsets:longOffsets,heatmap:heatmap,displacementFwd:displacementFwd,displacementBwd:displacementBwd,partOffsets:partOffsets}};return ResNet}(base_model_1.BaseModel);exports.ResNet=ResNet},{"./base_model":11,"@tensorflow/tfjs-core":35}],29:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.mobileNetSavedModel=exports.resNet50SavedModel=void 0;var RESNET50_BASE_URL="https://storage.googleapis.com/tfjs-models/savedmodel/bodypix/resnet50/";var MOBILENET_BASE_URL="https://storage.googleapis.com/tfjs-models/savedmodel/bodypix/mobilenet/";function resNet50SavedModel(stride,quantBytes){var graphJson="model-stride"+stride+".json";if(quantBytes===4){return RESNET50_BASE_URL+"float/"+graphJson}else{return RESNET50_BASE_URL+("quant"+quantBytes+"/")+graphJson}}exports.resNet50SavedModel=resNet50SavedModel;function mobileNetSavedModel(stride,multiplier,quantBytes){var toStr={1:"100",.75:"075",.5:"050"};var graphJson="model-stride"+stride+".json";if(quantBytes===4){return MOBILENET_BASE_URL+("float/"+toStr[multiplier]+"/")+graphJson}else{return MOBILENET_BASE_URL+("quant"+quantBytes+"/"+toStr[multiplier]+"/")+graphJson}}exports.mobileNetSavedModel=mobileNetSavedModel},{}],30:[function(require,module,exports){"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P(function(resolve){resolve(value)})}return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator["throw"](value))}catch(e){reject(e)}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})};var __generator=this&&this.__generator||function(thisArg,body){var _={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]},f,y,t,g;return g={next:verb(0),throw:verb(1),return:verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}};var _a;Object.defineProperty(exports,"__esModule",{value:true});exports.scaleAndFlipPoses=exports.flipPosesHorizontal=exports.flipPoseHorizontal=exports.scalePoses=exports.scalePose=exports.toTensorBuffers3D=exports.padAndResizeTo=exports.resize2d=exports.removePaddingAndResizeBack=exports.scaleAndCropToInputTensorShape=exports.resizeAndPadTo=exports.toInputTensor=exports.toInputResolutionHeightAndWidth=exports.toValidInputResolution=exports.getInputSize=void 0;var tf=require("@tensorflow/tfjs-core");function getSizeFromImageLikeElement(input){if("offsetHeight"in input&&input.offsetHeight!==0&&"offsetWidth"in input&&input.offsetWidth!==0){return[input.offsetHeight,input.offsetWidth]}else if(input.height!=null&&input.width!=null){return[input.height,input.width]}else{throw new Error("HTMLImageElement must have height and width attributes set.")}}function getSizeFromVideoElement(input){if(input.hasAttribute("height")&&input.hasAttribute("width")){return[input.height,input.width]}else{return[input.videoHeight,input.videoWidth]}}function getInputSize(input){if(typeof HTMLCanvasElement!=="undefined"&&input instanceof HTMLCanvasElement||typeof OffscreenCanvas!=="undefined"&&input instanceof OffscreenCanvas||typeof HTMLImageElement!=="undefined"&&input instanceof HTMLImageElement){return getSizeFromImageLikeElement(input)}else if(typeof ImageData!=="undefined"&&input instanceof ImageData){return[input.height,input.width]}else if(typeof HTMLVideoElement!=="undefined"&&input instanceof HTMLVideoElement){return getSizeFromVideoElement(input)}else if(input instanceof tf.Tensor){return[input.shape[0],input.shape[1]]}else{throw new Error("error: Unknown input type: "+input+".")}}exports.getInputSize=getInputSize;function isValidInputResolution(resolution,outputStride){return(resolution-1)%outputStride===0}function toValidInputResolution(inputResolution,outputStride){if(isValidInputResolution(inputResolution,outputStride)){return inputResolution}return Math.floor(inputResolution/outputStride)*outputStride+1}exports.toValidInputResolution=toValidInputResolution;var INTERNAL_RESOLUTION_STRING_OPTIONS={low:"low",medium:"medium",high:"high",full:"full"};var INTERNAL_RESOLUTION_PERCENTAGES=(_a={},_a[INTERNAL_RESOLUTION_STRING_OPTIONS.low]=.25,_a[INTERNAL_RESOLUTION_STRING_OPTIONS.medium]=.5,_a[INTERNAL_RESOLUTION_STRING_OPTIONS.high]=.75,_a[INTERNAL_RESOLUTION_STRING_OPTIONS.full]=1,_a);var MIN_INTERNAL_RESOLUTION=.1;var MAX_INTERNAL_RESOLUTION=2;function toInternalResolutionPercentage(internalResolution){if(typeof internalResolution==="string"){var result=INTERNAL_RESOLUTION_PERCENTAGES[internalResolution];tf.util.assert(typeof result==="number",function(){return"string value of inputResolution must be one of "+Object.values(INTERNAL_RESOLUTION_STRING_OPTIONS).join(",")+" but was "+internalResolution+"."});return result}else{tf.util.assert(typeof internalResolution==="number"&&internalResolution<=MAX_INTERNAL_RESOLUTION&&internalResolution>=MIN_INTERNAL_RESOLUTION,function(){return"inputResolution must be a string or number between "+MIN_INTERNAL_RESOLUTION+" and "+MAX_INTERNAL_RESOLUTION+", but "+("was "+internalResolution)});return internalResolution}}function toInputResolutionHeightAndWidth(internalResolution,outputStride,_a){var inputHeight=_a[0],inputWidth=_a[1];var internalResolutionPercentage=toInternalResolutionPercentage(internalResolution);return[toValidInputResolution(inputHeight*internalResolutionPercentage,outputStride),toValidInputResolution(inputWidth*internalResolutionPercentage,outputStride)]}exports.toInputResolutionHeightAndWidth=toInputResolutionHeightAndWidth;function toInputTensor(input){return input instanceof tf.Tensor?input:tf.browser.fromPixels(input)}exports.toInputTensor=toInputTensor;function resizeAndPadTo(imageTensor,_a,flipHorizontal){var targetH=_a[0],targetW=_a[1];if(flipHorizontal===void 0){flipHorizontal=false}var _b=imageTensor.shape,height=_b[0],width=_b[1];var targetAspect=targetW/targetH;var aspect=width/height;var resizeW;var resizeH;var padL;var padR;var padT;var padB;if(aspect>targetAspect){resizeW=targetW;resizeH=Math.ceil(resizeW/aspect);var padHeight=targetH-resizeH;padL=0;padR=0;padT=Math.floor(padHeight/2);padB=targetH-(resizeH+padT)}else{resizeH=targetH;resizeW=Math.ceil(targetH*aspect);var padWidth=targetW-resizeW;padL=Math.floor(padWidth/2);padR=targetW-(resizeW+padL);padT=0;padB=0}var resizedAndPadded=tf.tidy(function(){var resized;if(flipHorizontal){resized=tf.image.resizeBilinear(tf.reverse(imageTensor,1),[resizeH,resizeW])}else{resized=tf.image.resizeBilinear(imageTensor,[resizeH,resizeW])}var padded=tf.pad3d(resized,[[padT,padB],[padL,padR],[0,0]]);return padded});return{resizedAndPadded:resizedAndPadded,paddedBy:[[padT,padB],[padL,padR]]}}exports.resizeAndPadTo=resizeAndPadTo;function scaleAndCropToInputTensorShape(tensor,_a,_b,_c,applySigmoidActivation){var inputTensorHeight=_a[0],inputTensorWidth=_a[1];var resizedAndPaddedHeight=_b[0],resizedAndPaddedWidth=_b[1];var _d=_c[0],padT=_d[0],padB=_d[1],_e=_c[1],padL=_e[0],padR=_e[1];if(applySigmoidActivation===void 0){applySigmoidActivation=false}return tf.tidy(function(){var inResizedAndPadded=tf.image.resizeBilinear(tensor,[resizedAndPaddedHeight,resizedAndPaddedWidth],true);if(applySigmoidActivation){inResizedAndPadded=tf.sigmoid(inResizedAndPadded)}return removePaddingAndResizeBack(inResizedAndPadded,[inputTensorHeight,inputTensorWidth],[[padT,padB],[padL,padR]])})}exports.scaleAndCropToInputTensorShape=scaleAndCropToInputTensorShape;function removePaddingAndResizeBack(resizedAndPadded,_a,_b){var originalHeight=_a[0],originalWidth=_a[1];var _c=_b[0],padT=_c[0],padB=_c[1],_d=_b[1],padL=_d[0],padR=_d[1];return tf.tidy(function(){var batchedImage=tf.expandDims(resizedAndPadded);return tf.squeeze(tf.image.cropAndResize(batchedImage,[[padT/(originalHeight+padT+padB-1),padL/(originalWidth+padL+padR-1),(padT+originalHeight-1)/(originalHeight+padT+padB-1),(padL+originalWidth-1)/(originalWidth+padL+padR-1)]],[0],[originalHeight,originalWidth]),[0])})}exports.removePaddingAndResizeBack=removePaddingAndResizeBack;function resize2d(tensor,resolution,nearestNeighbor){return tf.tidy(function(){var batchedImage=tf.expandDims(tensor,2);return tf.squeeze(tf.image.resizeBilinear(batchedImage,resolution,nearestNeighbor))})}exports.resize2d=resize2d;function padAndResizeTo(input,_a){var targetH=_a[0],targetW=_a[1];var _b=getInputSize(input),height=_b[0],width=_b[1];var targetAspect=targetW/targetH;var aspect=width/height;var _c=[0,0,0,0],padT=_c[0],padB=_c[1],padL=_c[2],padR=_c[3];if(aspect<targetAspect){padT=0;padB=0;padL=Math.round(.5*(targetAspect*height-width));padR=Math.round(.5*(targetAspect*height-width))}else{padT=Math.round(.5*(1/targetAspect*width-height));padB=Math.round(.5*(1/targetAspect*width-height));padL=0;padR=0}var resized=tf.tidy(function(){var imageTensor=toInputTensor(input);imageTensor=tf.pad3d(imageTensor,[[padT,padB],[padL,padR],[0,0]]);return tf.image.resizeBilinear(imageTensor,[targetH,targetW])});return{resized:resized,padding:{top:padT,left:padL,right:padR,bottom:padB}}}exports.padAndResizeTo=padAndResizeTo;function toTensorBuffers3D(tensors){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(_a){return[2,Promise.all(tensors.map(function(tensor){return tensor.buffer()}))]})})}exports.toTensorBuffers3D=toTensorBuffers3D;function scalePose(pose,scaleY,scaleX,offsetY,offsetX){if(offsetY===void 0){offsetY=0}if(offsetX===void 0){offsetX=0}return{score:pose.score,keypoints:pose.keypoints.map(function(_a){var score=_a.score,part=_a.part,position=_a.position;return{score:score,part:part,position:{x:position.x*scaleX+offsetX,y:position.y*scaleY+offsetY}}})}}exports.scalePose=scalePose;function scalePoses(poses,scaleY,scaleX,offsetY,offsetX){if(offsetY===void 0){offsetY=0}if(offsetX===void 0){offsetX=0}if(scaleX===1&&scaleY===1&&offsetY===0&&offsetX===0){return poses}return poses.map(function(pose){return scalePose(pose,scaleY,scaleX,offsetY,offsetX)})}exports.scalePoses=scalePoses;function flipPoseHorizontal(pose,imageWidth){return{score:pose.score,keypoints:pose.keypoints.map(function(_a){var score=_a.score,part=_a.part,position=_a.position;return{score:score,part:part,position:{x:imageWidth-1-position.x,y:position.y}}})}}exports.flipPoseHorizontal=flipPoseHorizontal;function flipPosesHorizontal(poses,imageWidth){if(imageWidth<=0){return poses}return poses.map(function(pose){return flipPoseHorizontal(pose,imageWidth)})}exports.flipPosesHorizontal=flipPosesHorizontal;function scaleAndFlipPoses(poses,_a,_b,padding,flipHorizontal){var height=_a[0],width=_a[1];var inputResolutionHeight=_b[0],inputResolutionWidth=_b[1];var scaleY=(height+padding.top+padding.bottom)/inputResolutionHeight;var scaleX=(width+padding.left+padding.right)/inputResolutionWidth;var scaledPoses=scalePoses(poses,scaleY,scaleX,-padding.top,-padding.left);if(flipHorizontal){return flipPosesHorizontal(scaledPoses,width)}else{return scaledPoses}}exports.scaleAndFlipPoses=scaleAndFlipPoses},{"@tensorflow/tfjs-core":35}],31:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.version=void 0;var version="2.2.0";exports.version=version},{}],32:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var tfjsCore=require("@tensorflow/tfjs-core");var seedrandom=require("seedrandom");function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=="default"){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}})}})}n["default"]=e;return n}var seedrandom__namespace=_interopNamespace(seedrandom);var extendStatics=function(d,b){extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b}||function(d,b){for(var p in b)if(b.hasOwnProperty(p))d[p]=b[p]};return extendStatics(d,b)};function __extends(d,b){extendStatics(d,b);function __(){this.constructor=d}d.prototype=b===null?Object.create(b):(__.prototype=b.prototype,new __)}function __awaiter(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P(function(resolve){resolve(value)})}return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator["throw"](value))}catch(e){reject(e)}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})}function __generator(thisArg,body){var _={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]},f,y,t,g;return g={next:verb(0),throw:verb(1),return:verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}function __values(o){var s=typeof Symbol==="function"&&Symbol.iterator,m=s&&o[s],i=0;if(m)return m.call(o);if(o&&typeof o.length==="number")return{next:function(){if(o&&i>=o.length)o=void 0;return{value:o&&o[i++],done:!o}}};throw new TypeError(s?"Object is not iterable.":"Symbol.iterator is not defined.")}function __read(o,n){var m=typeof Symbol==="function"&&o[Symbol.iterator];if(!m)return o;var i=m.call(o),r,ar=[],e;try{while((n===void 0||n-- >0)&&!(r=i.next()).done)ar.push(r.value)}catch(error){e={error:error}}finally{try{if(r&&!r.done&&(m=i["return"]))m.call(i)}finally{if(e)throw e.error}}return ar}function __spread(){for(var ar=[],i=0;i<arguments.length;i++)ar=ar.concat(__read(arguments[i]));return ar}function assertNotComplex(tensor,opName){if(!Array.isArray(tensor)){tensor=[tensor]}tensor.forEach(function(t){if(t!=null){tfjsCore.util.assert(t.dtype!=="complex64",function(){return opName+" does not support complex64 tensors in the CPU backend."})}})}var whereImpl=tfjsCore.kernel_impls.whereImpl;var MathBackendCPU=function(_super){__extends(MathBackendCPU,_super);function MathBackendCPU(){var _this=_super.call(this)||this;_this.blockSize=48;_this.firstUse=true;_this.data=new tfjsCore.DataStorage(_this,tfjsCore.engine());return _this}MathBackendCPU.prototype.nextDataId=function(){return MathBackendCPU.nextDataId++};MathBackendCPU.prototype.write=function(values,shape,dtype){if(this.firstUse){this.firstUse=false;if(tfjsCore.env().get("IS_NODE")){tfjsCore.backend_util.warn("\n============================\n"+"Hi there 👋. Looks like you are running TensorFlow.js in "+"Node.js. To speed things up dramatically, install our node "+"backend, which binds to TensorFlow C++, by running "+"npm i @tensorflow/tfjs-node, "+"or npm i @tensorflow/tfjs-node-gpu if you have CUDA. "+"Then call require('@tensorflow/tfjs-node'); (-gpu "+"suffix for CUDA) at the start of your program. "+"Visit https://github.com/tensorflow/tfjs-node for more details."+"\n============================")}}var dataId={id:this.nextDataId()};this.data.set(dataId,{values:values,dtype:dtype,refCount:1});return dataId};MathBackendCPU.prototype.makeTensorInfo=function(shape,dtype,values){var outId;if(dtype==="string"&&values!=null&&values.length>0&&tfjsCore.util.isString(values[0])){var encodedValues=values.map(function(d){return tfjsCore.util.encodeString(d)});outId=this.write(encodedValues,shape,dtype)}else{outId=this.write(values,shape,dtype)}return{dataId:outId,shape:shape,dtype:dtype}};MathBackendCPU.prototype.refCount=function(dataId){if(this.data.has(dataId)){var tensorData=this.data.get(dataId);return tensorData.refCount}return 0};MathBackendCPU.prototype.incRef=function(dataId){var tensorData=this.data.get(dataId);tensorData.refCount++};MathBackendCPU.prototype.decRef=function(dataId){if(this.data.has(dataId)){var tensorData=this.data.get(dataId);tensorData.refCount--}};MathBackendCPU.prototype.move=function(dataId,values,shape,dtype,refCount){this.data.set(dataId,{values:values,dtype:dtype,refCount:refCount})};MathBackendCPU.prototype.numDataIds=function(){return this.data.numDataIds()};MathBackendCPU.prototype.read=function(dataId){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(_b){return[2,this.readSync(dataId)]})})};MathBackendCPU.prototype.readSync=function(dataId){var _b=this.data.get(dataId),dtype=_b.dtype,complexTensorInfos=_b.complexTensorInfos;if(dtype==="complex64"){var realValues=this.readSync(complexTensorInfos.real.dataId);var imagValues=this.readSync(complexTensorInfos.imag.dataId);return tfjsCore.backend_util.mergeRealAndImagArrays(realValues,imagValues)}return this.data.get(dataId).values};MathBackendCPU.prototype.bufferSync=function(t){var data=this.readSync(t.dataId);var decodedData=data;if(t.dtype==="string"){try{decodedData=data.map(function(d){return tfjsCore.util.decodeString(d)})}catch(_a){throw new Error("Failed to decode encoded string bytes into utf-8")}}return tfjsCore.buffer(t.shape,t.dtype,decodedData)};MathBackendCPU.prototype.makeOutput=function(values,shape,dtype){var dataId=this.write(values,shape,dtype);return tfjsCore.engine().makeTensorFromDataId(dataId,shape,dtype,this)};MathBackendCPU.prototype.disposeData=function(dataId,force){if(force===void 0){force=false}if(this.data.has(dataId)){this.data.get(dataId).refCount--;if(!force&&this.data.get(dataId).refCount>0){return false}var complexTensorInfos=this.data.get(dataId).complexTensorInfos;if(complexTensorInfos!=null){this.disposeData(complexTensorInfos.real.dataId,true);this.disposeData(complexTensorInfos.imag.dataId,true)}this.data.delete(dataId)}return true};MathBackendCPU.prototype.disposeIntermediateTensorInfo=function(tensorInfo){this.disposeData(tensorInfo.dataId)};MathBackendCPU.prototype.time=function(f){return __awaiter(this,void 0,void 0,function(){var start,kernelMs;return __generator(this,function(_b){start=tfjsCore.util.now();f();kernelMs=tfjsCore.util.now()-start;return[2,{kernelMs:kernelMs}]})})};MathBackendCPU.prototype.memory=function(){return{unreliable:true,reasons:["The reported memory is an upper bound. Due to automatic garbage "+"collection, the true allocated memory may be less."]}};MathBackendCPU.prototype.where=function(condition){assertNotComplex([condition],"where");var condVals=this.readSync(condition.dataId);return whereImpl(condition.shape,condVals)};MathBackendCPU.prototype.dispose=function(){};MathBackendCPU.prototype.floatPrecision=function(){return 32};MathBackendCPU.prototype.epsilon=function(){return _super.prototype.epsilon.call(this)};return MathBackendCPU}(tfjsCore.KernelBackend);MathBackendCPU.nextDataId=0;function simpleAbsImpl(vals){var resultValues=new Float32Array(vals.length);for(var i=0;i<vals.length;++i){resultValues[i]=Math.abs(vals[i])}return resultValues}var abs=function(args){var x=args.inputs.x;var cpuBackend=args.backend;assertNotComplex(x,"abs");var resultValues=new Float32Array(tfjsCore.util.sizeFromShape(x.shape));var values=cpuBackend.data.get(x.dataId).values;resultValues=simpleAbsImpl(values);return cpuBackend.makeOutput(resultValues,x.shape,x.dtype)};var absConfig={kernelName:tfjsCore.Abs,backendName:"cpu",kernelFunc:abs};function createSimpleBinaryKernelImpl(op){return function(aShape,bShape,aVals,bVals,dtype){var newShape=tfjsCore.backend_util.assertAndGetBroadcastShape(aShape,bShape);var resultRank=newShape.length;var resultStrides=tfjsCore.util.computeStrides(newShape);var resultSize=tfjsCore.util.sizeFromShape(newShape);var result=tfjsCore.util.getTypedArrayFromDType(dtype,resultSize);var aRank=aShape.length;var bRank=bShape.length;var aStrides=tfjsCore.util.computeStrides(aShape);var bStrides=tfjsCore.util.computeStrides(bShape);var aBroadcastDims=tfjsCore.backend_util.getBroadcastDims(aShape,newShape);var bBroadcastDims=tfjsCore.backend_util.getBroadcastDims(bShape,newShape);if(aBroadcastDims.length+bBroadcastDims.length===0){for(var i=0;i<result.length;++i){result[i]=op(aVals[i%aVals.length],bVals[i%bVals.length])}}else{var _loop_1=function(i){var loc=tfjsCore.util.indexToLoc(i,resultRank,resultStrides);var aLoc=loc.slice(-aRank);aBroadcastDims.forEach(function(d){return aLoc[d]=0});var aIndex=tfjsCore.util.locToIndex(aLoc,aRank,aStrides);var bLoc=loc.slice(-bRank);bBroadcastDims.forEach(function(d){return bLoc[d]=0});var bIndex=tfjsCore.util.locToIndex(bLoc,bRank,bStrides);result[i]=op(aVals[aIndex],bVals[bIndex])};for(var i=0;i<result.length;++i){_loop_1(i)}}return[result,newShape]}}function complex(args){var inputs=args.inputs,backend=args.backend;var real=inputs.real,imag=inputs.imag;var realVals=backend.data.get(real.dataId).values;var imagVals=backend.data.get(imag.dataId).values;var complexInfo=backend.makeTensorInfo(real.shape,"complex64");var complex=backend.data.get(complexInfo.dataId);complex.complexTensorInfos={real:backend.makeTensorInfo(real.shape,"float32",realVals),imag:backend.makeTensorInfo(imag.shape,"float32",imagVals)};return complexInfo}var complexConfig={kernelName:tfjsCore.Complex,backendName:"cpu",kernelFunc:complex};function zeros(backend,shape,dtype){if(dtype===void 0){dtype="float32"}if(dtype==="complex64"){var real=zeros(backend,shape,"float32");var imag=zeros(backend,shape,"float32");return complex({inputs:{real:real,imag:imag},backend:backend})}var values=tfjsCore.util.makeZerosTypedArray(tfjsCore.util.sizeFromShape(shape),dtype);return backend.makeTensorInfo(shape,dtype,values)}function identity(args){var inputs=args.inputs,backend=args.backend;var x=inputs.x;backend.incRef(x.dataId);return{dataId:x.dataId,shape:x.shape,dtype:x.dtype}}var identityConfig={kernelName:tfjsCore.Identity,backendName:"cpu",kernelFunc:identity};function real(args){var inputs=args.inputs,backend=args.backend;var input=inputs.input;var real=backend.data.get(input.dataId).complexTensorInfos.real;var realVal=backend.data.get(real.dataId).values;return backend.makeTensorInfo(real.shape,real.dtype,realVal)}var realConfig={kernelName:tfjsCore.Real,backendName:"cpu",kernelFunc:real};function cast(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var dtype=attrs.dtype;if(dtype==="complex64"){if(x.dtype==="complex64"){return identity({inputs:{x:x},backend:backend})}var zerosTensorInfo=zeros(backend,x.shape,x.dtype);var floatX=cast({inputs:{x:x},backend:backend,attrs:{dtype:"float32"}});var result=complex({inputs:{real:floatX,imag:zerosTensorInfo},backend:backend});backend.disposeIntermediateTensorInfo(zerosTensorInfo);backend.disposeIntermediateTensorInfo(floatX);return result}if(x.dtype==="complex64"){var realPart=real({inputs:{input:x},backend:backend});var result=cast({inputs:{x:realPart},backend:backend,attrs:{dtype:dtype}});backend.disposeIntermediateTensorInfo(realPart);return result}if(!tfjsCore.util.hasEncodingLoss(x.dtype,dtype)){var result=identity({inputs:{x:x},backend:backend});return{dataId:result.dataId,shape:result.shape,dtype:dtype}}if(dtype==="int32"){var values=backend.data.get(x.dataId).values;var resultValues=Int32Array.from(values);return backend.makeTensorInfo(x.shape,"int32",resultValues)}if(dtype==="bool"){var xVals=backend.data.get(x.dataId).values;var zero=tfjsCore.util.toTypedArray([0],x.dtype);var _a=__read(createSimpleBinaryKernelImpl(function(a,b){return a!==b?1:0})(x.shape,[],xVals,zero,"bool"),2),resultData=_a[0],resultShape=_a[1];return backend.makeTensorInfo(resultShape,"bool",resultData)}throw new Error("Error in Cast: failed to cast "+x.dtype+" to "+dtype)}var castConfig={kernelName:tfjsCore.Cast,backendName:"cpu",kernelFunc:cast};function binaryKernelFunc(name,simpleImpl,complexImpl,dtype){if(complexImpl==null){return function(_a){var inputs=_a.inputs,backend=_a.backend;var a=inputs.a,b=inputs.b;var cpuBackend=backend;assertNotComplex([a,b],name);var aVals=cpuBackend.data.get(a.dataId).values;var bVals=cpuBackend.data.get(b.dataId).values;var decodedAVals=a.dtype==="string"?tfjsCore.backend_util.fromUint8ToStringArray(aVals):aVals;var decodedBVals=a.dtype==="string"?tfjsCore.backend_util.fromUint8ToStringArray(bVals):bVals;var $dtype=dtype||a.dtype;var _b=__read(simpleImpl(a.shape,b.shape,decodedAVals,decodedBVals,$dtype),2),resultData=_b[0],resultShape=_b[1];return cpuBackend.makeTensorInfo(resultShape,$dtype,resultData)}}return function(_a){var inputs=_a.inputs,backend=_a.backend;var a=inputs.a,b=inputs.b;var cpuBackend=backend;if(a.dtype==="complex64"||b.dtype==="complex64"){var $aComplex=cast({inputs:{x:a},backend:cpuBackend,attrs:{dtype:"complex64"}});var $aComplexVals=cpuBackend.data.get($aComplex.dataId);var aReal=$aComplexVals.complexTensorInfos.real;var aImag=$aComplexVals.complexTensorInfos.imag;var aRealVals=cpuBackend.data.get(aReal.dataId).values;var aImagVals=cpuBackend.data.get(aImag.dataId).values;var $bComplex=cast({inputs:{x:b},backend:cpuBackend,attrs:{dtype:"complex64"}});var $bComplexVals=cpuBackend.data.get($bComplex.dataId);var bReal=$bComplexVals.complexTensorInfos.real;var bImag=$bComplexVals.complexTensorInfos.imag;var bRealVals=cpuBackend.data.get(bReal.dataId).values;var bImagVals=cpuBackend.data.get(bImag.dataId).values;var _b=__read(complexImpl(a.shape,b.shape,aRealVals,aImagVals,bRealVals,bImagVals),3),resultRealData=_b[0],resultImagData=_b[1],resultShape=_b[2];var resultReal=cpuBackend.makeTensorInfo(resultShape,"float32",resultRealData);var resultImag=cpuBackend.makeTensorInfo(resultShape,"float32",resultImagData);var result=complex({inputs:{real:resultReal,imag:resultImag},backend:cpuBackend});cpuBackend.disposeIntermediateTensorInfo($aComplex);cpuBackend.disposeIntermediateTensorInfo($bComplex);cpuBackend.disposeIntermediateTensorInfo(resultReal);cpuBackend.disposeIntermediateTensorInfo(resultImag);return result}else{var aVals=cpuBackend.data.get(a.dataId).values;var bVals=cpuBackend.data.get(b.dataId).values;var $dtype=dtype||a.dtype;var _c=__read(simpleImpl(a.shape,b.shape,aVals,bVals,$dtype),2),resultData=_c[0],resultShape=_c[1];return cpuBackend.makeTensorInfo(resultShape,$dtype,resultData)}}}function createComplexBinaryKernelImpl(op){return function(aShape,bShape,aRealVals,aImagVals,bRealVals,bImagVals){var resultShape=tfjsCore.backend_util.assertAndGetBroadcastShape(aShape,bShape);var resultSize=tfjsCore.util.sizeFromShape(resultShape);var resultRank=resultShape.length;var resultStrides=tfjsCore.util.computeStrides(resultShape);var resultRealVals=tfjsCore.util.getTypedArrayFromDType("float32",resultSize);var resultImagVals=tfjsCore.util.getTypedArrayFromDType("float32",resultSize);var aBroadcastDims=tfjsCore.backend_util.getBroadcastDims(aShape,resultShape);var bBroadcastDims=tfjsCore.backend_util.getBroadcastDims(bShape,resultShape);var aVals=tfjsCore.backend_util.mergeRealAndImagArrays(aRealVals,aImagVals);var bVals=tfjsCore.backend_util.mergeRealAndImagArrays(bRealVals,bImagVals);var aRank=aShape.length;var aStrides=tfjsCore.util.computeStrides(aShape);var bRank=bShape.length;var bStrides=tfjsCore.util.computeStrides(bShape);if(aBroadcastDims.length+bBroadcastDims.length===0){for(var i=0;i<resultRealVals.length;i++){var aIdx=i%aVals.length;var bIdx=i%bVals.length;var result=op(aVals[aIdx*2],aVals[aIdx*2+1],bVals[bIdx*2],bVals[bIdx*2+1]);resultRealVals[i]=result.real;resultImagVals[i]=result.imag}}else{var _loop_1=function(i){var loc=tfjsCore.util.indexToLoc(i,resultRank,resultStrides);var aLoc=loc.slice(-aRank);aBroadcastDims.forEach(function(d){return aLoc[d]=0});var aIndex=tfjsCore.util.locToIndex(aLoc,aRank,aStrides);var bLoc=loc.slice(-bRank);bBroadcastDims.forEach(function(d){return bLoc[d]=0});var bIndex=tfjsCore.util.locToIndex(bLoc,bRank,bStrides);var opResult=op(aVals[aIndex*2],aVals[aIndex*2+1],bVals[bIndex*2],bVals[bIndex*2+1]);resultRealVals[i]=opResult.real;resultImagVals[i]=opResult.imag};for(var i=0;i<resultRealVals.length;i++){_loop_1(i)}}return[resultRealVals,resultImagVals,resultShape]}}var addImpl=createSimpleBinaryKernelImpl(function(a,b){return a+b});var addComplexImpl=createComplexBinaryKernelImpl(function(aReal,aImag,bReal,bImag){return{real:aReal+bReal,imag:aImag+bImag}});var add=binaryKernelFunc(tfjsCore.Add,addImpl,addComplexImpl);var addConfig={kernelName:tfjsCore.Add,backendName:"cpu",kernelFunc:add};function bincountImpl(xVals,weightsVals,weightsDtype,weightsShape,size){var weightsSize=tfjsCore.util.sizeFromShape(weightsShape);var outVals=tfjsCore.util.makeZerosTypedArray(size,weightsDtype);for(var i=0;i<xVals.length;i++){var value=xVals[i];if(value<0){throw new Error("Input x must be non-negative!")}if(value>=size){continue}if(weightsSize>0){outVals[value]+=weightsVals[i]}else{outVals[value]+=1}}return outVals}function bincountReduceImpl(xBuf,weightsBuf,size,binaryOutput){if(binaryOutput===void 0){binaryOutput=false}var numRows=xBuf.shape[0];var numCols=xBuf.shape[1];var outBuf=tfjsCore.buffer([numRows,size],weightsBuf.dtype);for(var i=0;i<numRows;i++){for(var j=0;j<numCols;j++){var value=xBuf.get(i,j);if(value<0){throw new Error("Input x must be non-negative!")}if(value>=size){continue}if(binaryOutput){outBuf.set(1,i,value)}else{if(weightsBuf.size>0){outBuf.set(outBuf.get(i,value)+weightsBuf.get(i,j),i,value)}else{outBuf.set(outBuf.get(i,value)+1,i,value)}}}}return outBuf}function createSimpleUnaryImpl(op){return function(values,dtype,attrs){var newValues=tfjsCore.util.getTypedArrayFromDType(dtype,values.length);for(var i=0;i<values.length;++i){newValues[i]=op(values[i],attrs)}return newValues}}function unaryKernelFunc(name,op,dtype){return function(_a){var inputs=_a.inputs,attrs=_a.attrs,backend=_a.backend;var x=inputs.x;assertNotComplex(x,name);if(x.dtype==="string"||dtype==="string"){throw new Error("unaryKernelFunc does not support string input/output")}var cpuBackend=backend;var values=cpuBackend.data.get(x.dataId).values;var xSize=tfjsCore.util.sizeFromShape(x.shape);var $dtype=dtype||x.dtype;var newValues=tfjsCore.util.getArrayFromDType($dtype,xSize);for(var i=0;i<xSize;++i){newValues[i]=op(values[i],attrs)}return cpuBackend.makeTensorInfo(x.shape,$dtype,newValues)}}function unaryKernelFuncFromImpl(name,unaryImpl,dtype){return function(_a){var inputs=_a.inputs,attrs=_a.attrs,backend=_a.backend;var x=inputs.x;assertNotComplex(x,name);if(x.dtype==="string"||dtype==="string"){throw new Error("unaryKernelFunc does not support string input/output")}var cpuBackend=backend;var values=cpuBackend.data.get(x.dataId).values;var $dtype=dtype||x.dtype;var newValues=unaryImpl(values,$dtype,attrs);return cpuBackend.makeTensorInfo(x.shape,$dtype,newValues)}}var ceilImpl=createSimpleUnaryImpl(function(xi){return Math.ceil(xi)});var ceil=unaryKernelFuncFromImpl(tfjsCore.Ceil,ceilImpl);var ceilConfig={kernelName:tfjsCore.Ceil,backendName:"cpu",kernelFunc:ceil};function concatImpl(inputs,outShape,dtype,simplyConcat){var outVals=tfjsCore.util.getArrayFromDType(dtype,tfjsCore.util.sizeFromShape(outShape));if(simplyConcat&&dtype!=="string"){var offset_1=0;inputs.forEach(function(input){var size=tfjsCore.util.sizeFromShape(input.shape);outVals.set(input.vals,offset_1);offset_1+=size})}else{var colOffset_1=0;inputs.forEach(function(input){var decodedData=dtype==="string"?tfjsCore.backend_util.fromUint8ToStringArray(input.vals):input.vals;var tIdx=0;for(var row=0;row<input.shape[0];++row){var resIdx=row*outShape[1]+colOffset_1;for(var col=0;col<input.shape[1];++col){outVals[resIdx+col]=decodedData[tIdx++]}}colOffset_1+=input.shape[1]})}return outVals}var equalImpl=createSimpleBinaryKernelImpl(function(a,b){return a===b?1:0});var equal=binaryKernelFunc(tfjsCore.Equal,equalImpl,null,"bool");var equalConfig={kernelName:tfjsCore.Equal,backendName:"cpu",kernelFunc:equal};var expImpl=createSimpleUnaryImpl(function(xi){return Math.exp(xi)});var exp=unaryKernelFuncFromImpl(tfjsCore.Exp,expImpl,"float32");var expConfig={kernelName:tfjsCore.Exp,backendName:"cpu",kernelFunc:exp};var expm1Impl=createSimpleUnaryImpl(function(xi){return Math.expm1(xi)});var expm1=unaryKernelFuncFromImpl(tfjsCore.Expm1,expm1Impl);var expm1Config={kernelName:tfjsCore.Expm1,backendName:"cpu",kernelFunc:expm1};var floorImpl=createSimpleUnaryImpl(function(xi){return Math.floor(xi)});var floor=unaryKernelFuncFromImpl(tfjsCore.Floor,floorImpl);var floorConfig={kernelName:tfjsCore.Floor,backendName:"cpu",kernelFunc:floor};function gatherNdImpl(indicesData,paramsBuf,dtype,numSlices,sliceRank,sliceSize,strides,paramsShape,paramsSize){var outBuf=tfjsCore.buffer([numSlices,sliceSize],dtype);for(var i=0;i<numSlices;i++){var index=[];var flattenIndex=0;for(var j=0;j<sliceRank;j++){var dim=indicesData[i*sliceRank+j];flattenIndex+=dim*strides[j];index.push(dim)}if(flattenIndex<0||flattenIndex>=paramsSize/sliceSize){throw new Error("Invalid indices: "+index+" does not index into "+paramsShape)}for(var k=0;k<sliceSize;k++){outBuf.values[i*sliceSize+k]=paramsBuf.get.apply(paramsBuf,__spread(paramsBuf.indexToLoc(flattenIndex*sliceSize+k)))}}return outBuf}function gatherV2Impl(xBuf,indicesBuf,flattenOutputShape){var outBuf=tfjsCore.buffer(flattenOutputShape,xBuf.dtype);for(var i=0;i<outBuf.size;++i){var newLoc=outBuf.indexToLoc(i);var originalLoc=newLoc.slice();var batchIdx=originalLoc[0];var indicesIdx=originalLoc[2];var indicesIndex=indicesBuf.locToIndex([batchIdx,indicesIdx]);originalLoc[2]=indicesBuf.values[indicesIndex];var originalIndex=xBuf.locToIndex(originalLoc);outBuf.values[i]=xBuf.values[originalIndex]}return outBuf}var greaterImpl=createSimpleBinaryKernelImpl(function(a,b){return a>b?1:0});var greater=binaryKernelFunc(tfjsCore.Greater,greaterImpl,null,"bool");var greaterConfig={kernelName:tfjsCore.Greater,backendName:"cpu",kernelFunc:greater};var greaterEqualImpl=createSimpleBinaryKernelImpl(function(a,b){return a>=b?1:0});var greaterEqual=binaryKernelFunc(tfjsCore.GreaterEqual,greaterEqualImpl,null,"bool");var greaterEqualConfig={kernelName:tfjsCore.GreaterEqual,backendName:"cpu",kernelFunc:greaterEqual};var lessImpl=createSimpleBinaryKernelImpl(function(a,b){return a<b?1:0});var less=binaryKernelFunc(tfjsCore.Less,lessImpl,null,"bool");var lessConfig={kernelName:tfjsCore.Less,backendName:"cpu",kernelFunc:less};var lessEqualImpl=createSimpleBinaryKernelImpl(function(a,b){return a<=b?1:0});var lessEqual=binaryKernelFunc(tfjsCore.LessEqual,lessEqualImpl,null,"bool");var lessEqualConfig={kernelName:tfjsCore.LessEqual,backendName:"cpu",kernelFunc:lessEqual};function linSpaceImpl(start,stop,num){var step=(stop-start)/(num-1);var values=tfjsCore.util.makeZerosTypedArray(num,"float32");values[0]=start;for(var i=1;i<values.length;i++){values[i]=values[i-1]+step}return values}var logImpl=createSimpleUnaryImpl(function(xi){return Math.log(xi)});var log=unaryKernelFuncFromImpl(tfjsCore.Log,logImpl);var logConfig={kernelName:tfjsCore.Log,backendName:"cpu",kernelFunc:log};function maxImpl(aVals,reduceSize,outShape,dtype){var vals=tfjsCore.util.getTypedArrayFromDType(dtype,tfjsCore.util.sizeFromShape(outShape));for(var i=0;i<vals.length;++i){var offset=i*reduceSize;var max=aVals[offset];for(var j=0;j<reduceSize;++j){var value=aVals[offset+j];if(Number.isNaN(value)||value>max){max=value}}vals[i]=max}return vals}var maximumImpl=createSimpleBinaryKernelImpl(function(aValue,bValue){return Math.max(aValue,bValue)});var maximum=binaryKernelFunc(tfjsCore.Maximum,maximumImpl);var maximumConfig={kernelName:tfjsCore.Maximum,backendName:"cpu",kernelFunc:maximum};var minimumImpl=createSimpleBinaryKernelImpl(function(aValue,bValue){return Math.min(aValue,bValue)});var minimum=binaryKernelFunc(tfjsCore.Minimum,minimumImpl);var minimumConfig={kernelName:tfjsCore.Minimum,backendName:"cpu",kernelFunc:minimum};var multiplyImpl=createSimpleBinaryKernelImpl(function(aValue,bValue){return aValue*bValue});var multiplyComplexImpl=createComplexBinaryKernelImpl(function(aReal,aImag,bReal,bImag){return{real:aReal*bReal-aImag*bImag,imag:aReal*bImag+aImag*bReal}});var multiply=binaryKernelFunc(tfjsCore.Multiply,multiplyImpl,multiplyComplexImpl);var multiplyConfig={kernelName:tfjsCore.Multiply,backendName:"cpu",kernelFunc:multiply};function negImpl(xVals,xShape,xDtype){var minusOne=tfjsCore.util.createScalarValue(-1,xDtype);return multiplyImpl([],xShape,minusOne,xVals,xDtype)}function neg(args){var inputs=args.inputs,backend=args.backend;var x=inputs.x;assertNotComplex(x,"neg");var xVals=backend.data.get(x.dataId).values;var _a=__read(negImpl(xVals,x.shape,x.dtype),2),res=_a[0],newShape=_a[1];return backend.makeTensorInfo(newShape,x.dtype,res)}var negConfig={kernelName:tfjsCore.Neg,backendName:"cpu",kernelFunc:neg};var notEqualImpl=createSimpleBinaryKernelImpl(function(a,b){return a!==b?1:0});var notEqual=binaryKernelFunc(tfjsCore.NotEqual,notEqualImpl,null,"bool");var notEqualConfig={kernelName:tfjsCore.NotEqual,backendName:"cpu",kernelFunc:notEqual};function transposeImpl(xVals,xShape,dtype,perm,newShape){var xRank=xShape.length;var xSize=tfjsCore.util.sizeFromShape(xShape);var xStrides=tfjsCore.util.computeStrides(xShape);var newStrides=tfjsCore.util.computeStrides(newShape);var result=tfjsCore.util.getTypedArrayFromDType(dtype,tfjsCore.util.sizeFromShape(newShape));for(var i=0;i<xSize;++i){var loc=tfjsCore.util.indexToLoc(i,xRank,xStrides);var newLoc=new Array(loc.length);for(var i_1=0;i_1<newLoc.length;i_1++){newLoc[i_1]=loc[perm[i_1]]}var newIndex=tfjsCore.util.locToIndex(newLoc,xRank,newStrides);result[newIndex]=xVals[i]}return result}function transpose(args){var inputs=args.inputs,attrs=args.attrs,backend=args.backend;var x=inputs.x;var perm=attrs.perm;assertNotComplex(x,"transpose");var xRank=x.shape.length;var newShape=new Array(xRank);for(var i=0;i<newShape.length;i++){newShape[i]=x.shape[perm[i]]}var values=backend.data.get(x.dataId).values;var result=transposeImpl(values,x.shape,x.dtype,perm,newShape);var dataId=backend.write(result,newShape,x.dtype);return{dataId:dataId,shape:newShape,dtype:x.dtype}}var transposeConfig={kernelName:tfjsCore.Transpose,backendName:"cpu",kernelFunc:transpose};function prodImpl(xShape,xDtype,xVals,reductionAxes){var _a=__read(tfjsCore.backend_util.computeOutAndReduceShapes(xShape,reductionAxes),2),outShape=_a[0],reduceShape=_a[1];var outDtype=tfjsCore.upcastType(xDtype,"int32");var outVals=tfjsCore.util.makeZerosTypedArray(tfjsCore.util.sizeFromShape(outShape),outDtype);var reduceSize=tfjsCore.util.sizeFromShape(reduceShape);for(var i=0;i<outVals.length;++i){var offset=i*reduceSize;var prod_1=1;for(var j=0;j<reduceSize;++j){prod_1*=xVals[offset+j]}outVals[i]=prod_1}return{outVals:outVals,outShape:outShape,outDtype:outDtype}}function prod(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var axis=attrs.axis,keepDims=attrs.keepDims;assertNotComplex(x,"prod");var xRank=x.shape.length;var axes=tfjsCore.util.parseAxisParam(axis,x.shape);var permutation=tfjsCore.backend_util.getAxesPermutation(axes,xRank);var reductionAxes=axes;var permutedX=x;var intermediateTensorInfos=[];if(permutation!=null){permutedX=transpose({inputs:{x:x},backend:backend,attrs:{perm:permutation}});intermediateTensorInfos.push(permutedX);reductionAxes=tfjsCore.backend_util.getInnerMostAxes(reductionAxes.length,xRank)}var xVals=backend.data.get(permutedX.dataId).values;var _a=prodImpl(permutedX.shape,permutedX.dtype,xVals,reductionAxes),outVals=_a.outVals,outShape=_a.outShape,outDtype=_a.outDtype;var resultShape=outShape;if(keepDims){resultShape=tfjsCore.backend_util.expandShapeToKeepDim(outShape,axes)}intermediateTensorInfos.forEach(function(t){return backend.disposeIntermediateTensorInfo(t)});return backend.makeTensorInfo(resultShape,outDtype,outVals)}var prodConfig={kernelName:tfjsCore.Prod,backendName:"cpu",kernelFunc:prod};function rangeImpl(start,stop,step,dtype){var sameStartStop=start===stop;var increasingRangeNegativeStep=start<stop&&step<0;var decreasingRangePositiveStep=stop<start&&step>1;if(sameStartStop||increasingRangeNegativeStep||decreasingRangePositiveStep){return tfjsCore.util.makeZerosTypedArray(0,dtype)}var numElements=Math.abs(Math.ceil((stop-start)/step));var values=tfjsCore.util.makeZerosTypedArray(numElements,dtype);if(stop<start&&step===1){step=-1}values[0]=start;for(var i=1;i<values.length;i++){values[i]=values[i-1]+step}return values}var rsqrtImpl=createSimpleUnaryImpl(function(xi){return 1/Math.sqrt(xi)});var rsqrt=unaryKernelFuncFromImpl(tfjsCore.Rsqrt,rsqrtImpl);var rsqrtConfig={kernelName:tfjsCore.Rsqrt,backendName:"cpu",kernelFunc:rsqrt};var sigmoidImpl=createSimpleUnaryImpl(function(xi){return 1/(1+Math.exp(-xi))});var sigmoid=unaryKernelFunc(tfjsCore.Sigmoid,function(xi){return 1/(1+Math.exp(-xi))});var sigmoidConfig={kernelName:tfjsCore.Sigmoid,backendName:"cpu",kernelFunc:sigmoid};function sliceImpl(vals,begin,size,shape,dtype){var isContinous=tfjsCore.slice_util.isSliceContinous(shape,begin,size);var length=tfjsCore.util.sizeFromShape(size);var xStrides=tfjsCore.util.computeStrides(shape);if(isContinous){var flatOffset=tfjsCore.slice_util.computeFlatOffset(begin,xStrides);if(dtype==="string"){return vals.slice(flatOffset,flatOffset+length)}return vals.subarray(flatOffset,flatOffset+length)}var decodedData=dtype==="string"?tfjsCore.backend_util.fromUint8ToStringArray(vals):vals;var inBuf=tfjsCore.buffer(shape,dtype,decodedData);var outBuf=tfjsCore.buffer(size,dtype);for(var i=0;i<outBuf.size;++i){var outLoc=outBuf.indexToLoc(i);var inLoc=outLoc.map(function(idx,j){return idx+begin[j]});outBuf.set.apply(outBuf,__spread([inBuf.get.apply(inBuf,__spread(inLoc))],outLoc))}if(dtype==="string"){return tfjsCore.backend_util.fromStringArrayToUint8(outBuf.values)}return outBuf.values}function slice(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var begin=attrs.begin,size=attrs.size;assertNotComplex(x,"slice");var _a=__read(tfjsCore.slice_util.parseSliceParams(x,begin,size),2),$begin=_a[0],$size=_a[1];tfjsCore.slice_util.assertParamsValid(x,$begin,$size);var vals=backend.data.get(x.dataId).values;var outVals=sliceImpl(vals,$begin,$size,x.shape,x.dtype);return backend.makeTensorInfo($size,x.dtype,outVals)}var sliceConfig={kernelName:tfjsCore.Slice,backendName:"cpu",kernelFunc:slice};function sparseFillEmptyRowsImpl(indices,indicesShape,indicesDType,values,valuesDType,denseShape,defaultValue){var indicesCount=indicesShape[0];var denseRows=denseShape[0];var emptyRowIndicator=new Array(denseRows);var reverseIndexMap=new Array(indicesCount);var rank=indicesShape[1];if(denseRows===0){if(indicesCount!==0){throw new Error("Received SparseTensor with denseShape[0] = 0 but\n         indices.shape[0] = "+indicesCount)}var outputIndices=tfjsCore.util.getArrayFromDType(indicesDType,0);var outputValues=tfjsCore.util.getArrayFromDType(valuesDType,0);return[outputIndices,[0,rank],outputValues,emptyRowIndicator,reverseIndexMap]}var rowsAreOrdered=true;var lastIndicesRow=0;var csrOffset=new Array(denseRows).fill(0);for(var i=0;i<indicesCount;++i){var row=indices[i*rank];if(row<0){throw new Error("indices("+i+", 0) is invalid: "+row+" < 0")}if(row>=denseRows){throw new Error("indices("+i+", 0) is invalid: "+row+" >= "+denseRows)}++csrOffset[row];rowsAreOrdered=rowsAreOrdered&&row>=lastIndicesRow;lastIndicesRow=row}var allRowsFull=true;for(var row=0;row<denseRows;++row){var rowEmpty=csrOffset[row]===0;emptyRowIndicator[row]=rowEmpty;allRowsFull=allRowsFull&&!rowEmpty;csrOffset[row]=Math.max(csrOffset[row],1);if(row>0){csrOffset[row]+=csrOffset[row-1]}}if(allRowsFull&&rowsAreOrdered){var outputIndices=indices;var outputValues=values;for(var i=0;i<indicesCount;++i){reverseIndexMap[i]=i}return[outputIndices,[indicesCount,rank],outputValues,emptyRowIndicator,reverseIndexMap]}else{var fullIndicesCount=csrOffset[denseRows-1];var outputIndices=tfjsCore.util.getArrayFromDType(indicesDType,fullIndicesCount*rank);var outputValues=tfjsCore.util.getArrayFromDType(valuesDType,fullIndicesCount);var filledCount=new Array(denseRows).fill(0);for(var i=0;i<indicesCount;++i){var row=indices[i*rank];var offset=filledCount[row];var outputI=(row===0?0:csrOffset[row-1])+offset;filledCount[row]++;for(var j=0;j<rank;++j){outputIndices[outputI*rank+j]=indices[i*rank+j]}outputValues[outputI]=values[i];reverseIndexMap[i]=outputI}for(var row=0;row<denseRows;++row){var rowCount=filledCount[row];if(rowCount===0){var startingIndex=row===0?0:csrOffset[row-1];outputIndices[startingIndex*rank+0]=row;for(var col=1;col<rank;++col){outputIndices[startingIndex*rank+col]=0}outputValues[startingIndex]=defaultValue}}return[outputIndices,[fullIndicesCount,rank],outputValues,emptyRowIndicator,reverseIndexMap]}}function sparseReshapeImpl(inputIndices,inputIndicesShape,inputDType,inputShape,targetShape){var denseSize=tfjsCore.util.sizeFromShape(inputShape);var nnz=inputIndicesShape[0];var outputRank=targetShape.length;var outputShape=[];var product=1;var unknownIndex=-1;for(var d=0;d<outputRank;++d){var size=targetShape[d];if(size===-1){if(unknownIndex!==-1){throw new Error("only one output dimension may be -1, not both "+unknownIndex+" and "+d)}unknownIndex=d;outputShape.push(1)}else{if(size<0){throw new Error("size "+d+" must be non-negative, not "+size)}product*=size;outputShape.push(size)}}if(unknownIndex!==-1){if(product<=0){throw new Error("reshape cannot infer the missing "+"input size for an empty tensor unless all "+"specified input sizes are non-zero")}var missing=Math.trunc(denseSize/product);if(product*missing!==denseSize){throw new Error("Input to reshape is a SparseTensor with "+denseSize+"\n          dense values, but the requested shape requires a multiple of "+product+". inputShape="+inputShape+" outputShape= "+outputShape)}outputShape[unknownIndex]=missing}var outputSize=tfjsCore.util.sizeFromShape(outputShape);if(outputSize!==denseSize){throw new Error("Input to reshape is a tensor with "+denseSize+" dense values, but the requested shape has "+outputSize+". inputShape="+inputShape+" outputShape="+outputShape)}var inputRank=inputShape.length;var inputStrides=[];if(inputRank>0){inputStrides[inputRank-1]=1;for(var d=inputRank-2;d>=0;--d){inputStrides[d]=inputStrides[d+1]*inputShape[d+1]}}var outputStrides=[];if(outputRank>0){outputStrides[outputRank-1]=1;for(var d=outputRank-2;d>=0;--d){outputStrides[d]=outputStrides[d+1]*outputShape[d+1]}}var newIndices=tfjsCore.util.getArrayFromDType(inputDType,nnz*outputRank);for(var i=0;i<nnz;++i){var id=0;for(var j=0;j<inputRank;++j){id+=inputIndices[i*inputRank+j]*inputStrides[j]}for(var j=0;j<outputRank;++j){newIndices[i*outputRank+j]=Math.trunc(id/outputStrides[j]);id%=outputStrides[j]}}return[newIndices,[nnz,outputRank],outputShape]}function sparseSegmentReductionImpl(input,inputShape,inputDType,indices,segmentIds,isMean,defaultValue){if(isMean===void 0){isMean=false}if(defaultValue===void 0){defaultValue=0}var numIndices=indices.length;if(numIndices!==segmentIds.length){throw new Error("segmentIds and indices should have same size.")}var inputFlat=[inputShape[0],input.length/inputShape[0]];var numCol=inputFlat[1];var lastSegmentIdPlusOne=numIndices>0?segmentIds[numIndices-1]+1:0;var outputRows=lastSegmentIdPlusOne;if(outputRows<0){throw new Error("segment ids must be >= 0")}var outputShape=inputShape.slice();outputShape[0]=outputRows;var outputLength=outputShape.reduce(function(product,value){return product*value},1);var output=tfjsCore.util.getArrayFromDType(inputDType,outputLength);if(numIndices===0){if(outputRows>0){output.fill(defaultValue)}return[output,outputShape]}if(outputRows<=0){throw new Error("segment ids must be >= 0")}var start=0,end=1;var uninitializedIndex=0;var outIndex=segmentIds[start];while(true){var nextIndex=0;if(end<numIndices){nextIndex=segmentIds[end];if(outIndex===nextIndex){++end;continue}if(outIndex>=nextIndex){throw new Error("segment ids are not increasing")}}if(outIndex<0||outIndex>=outputRows){throw new Error("Segment id "+outIndex+" out of range [0, "+outputRows+"), possibly because segmentIds input is not sorted.")}if(outIndex>uninitializedIndex){output.fill(defaultValue,uninitializedIndex*numCol,outIndex*numCol)}for(var i=start;i<end;++i){var index=indices[i];if(index<0||index>=inputFlat[0]){throw new Error("Bad: indices["+i+"] == "+indices[i]+" out of range [0, "+inputFlat[0]+")")}for(var j=0;j<numCol;j++){output[outIndex*numCol+j]+=input[index*numCol+j]}}if(isMean){for(var j=0;j<numCol;j++){output[outIndex*numCol+j]/=end-start}}start=end;++end;uninitializedIndex=outIndex+1;outIndex=nextIndex;if(end>numIndices){break}}if(uninitializedIndex<outputRows){output.fill(defaultValue,uninitializedIndex*numCol,outputRows*numCol)}return[output,outputShape]}var sqrtImpl=createSimpleUnaryImpl(function(xi){return Math.sqrt(xi)});var sqrt=unaryKernelFunc(tfjsCore.Sqrt,function(xi){return Math.sqrt(xi)});var sqrtConfig={kernelName:tfjsCore.Sqrt,backendName:"cpu",kernelFunc:sqrt};var squaredDifferenceImpl=createSimpleBinaryKernelImpl(function(a,b){var diff=a-b;return diff*diff});var squaredDifference=binaryKernelFunc(tfjsCore.SquaredDifference,squaredDifferenceImpl);var squaredDifferenceConfig={kernelName:tfjsCore.SquaredDifference,backendName:"cpu",kernelFunc:squaredDifference};function stridedSliceImpl(outShape,xBuf,strides,begin){var outBuf=tfjsCore.buffer(outShape,xBuf.dtype);for(var i=0;i<outBuf.size;i++){var loc=outBuf.indexToLoc(i);var newLoc=new Array(loc.length);for(var j=0;j<newLoc.length;j++){newLoc[j]=loc[j]*strides[j]+begin[j]}outBuf.set.apply(outBuf,__spread([xBuf.get.apply(xBuf,__spread(newLoc))],loc))}return outBuf}var StringNGramsOp=function(){function StringNGramsOp(separator,nGramWidths,leftPad,rightPad,padWidth,preserveShortSequences){this.separator=tfjsCore.util.encodeString(separator);this.nGramWidths=nGramWidths;this.leftPad=tfjsCore.util.encodeString(leftPad);this.rightPad=tfjsCore.util.encodeString(rightPad);this.padWidth=padWidth;this.preserveShort=preserveShortSequences}StringNGramsOp.prototype.getPadWidth=function(nGramWidth){return Math.min(this.padWidth<0?nGramWidth-1:this.padWidth,nGramWidth-1)};StringNGramsOp.prototype.getNumNGrams=function(length,nGramWidth){var padWidth=this.getPadWidth(nGramWidth);return Math.max(0,length+2*padWidth-nGramWidth+1)};StringNGramsOp.prototype.createNGrams=function(data,splitIndex,output,outputStartIndex,numNGrams,nGramWidth){var _loop_1=function(nGramIndex){var padWidth=this_1.getPadWidth(nGramWidth);var leftPadding=Math.max(0,padWidth-nGramIndex);var rightPadding=Math.max(0,padWidth-(numNGrams-(nGramIndex+1)));var numTokens=nGramWidth-(leftPadding+rightPadding);var dataStartIndex=splitIndex+(leftPadding>0?0:nGramIndex-padWidth);var nGramSize=0;nGramSize+=leftPadding*this_1.leftPad.length;for(var n=0;n<numTokens;++n){nGramSize+=data[dataStartIndex+n].length}nGramSize+=rightPadding*this_1.rightPad.length;var numSeparators=leftPadding+rightPadding+numTokens-1;nGramSize+=numSeparators*this_1.separator.length;output[outputStartIndex+nGramIndex]=new Uint8Array(nGramSize);var nGram=output[outputStartIndex+nGramIndex];var nextNGramIndex=0;var appendToNGram=function(str){return str.forEach(function(value){return nGram[nextNGramIndex++]=value})};for(var n=0;n<leftPadding;++n){appendToNGram(this_1.leftPad);appendToNGram(this_1.separator)}for(var n=0;n<numTokens-1;++n){appendToNGram(data[dataStartIndex+n]);appendToNGram(this_1.separator)}if(numTokens>0){appendToNGram(data[dataStartIndex+numTokens-1]);for(var n=0;n<rightPadding;++n){appendToNGram(this_1.separator);appendToNGram(this_1.rightPad)}}else{for(var n=0;n<rightPadding-1;++n){appendToNGram(this_1.rightPad);appendToNGram(this_1.separator)}appendToNGram(this_1.rightPad)}};var this_1=this;for(var nGramIndex=0;nGramIndex<numNGrams;++nGramIndex){_loop_1(nGramIndex)}};StringNGramsOp.prototype.compute=function(data,splits){var _this=this;var inputDataSize=data.length;var splitsSize=splits.length;if(splitsSize>0){var prevSplit=splits[0];if(prevSplit!==0){throw new Error("First split value must be 0, got "+prevSplit)}for(var i=1;i<splitsSize;++i){var validSplits=splits[i]>=prevSplit;validSplits=validSplits&&splits[i]<=inputDataSize;if(!validSplits){throw new Error("Invalid split value "+splits[i]+", must be in ["+prevSplit+", "+inputDataSize+"]")}prevSplit=splits[i]}if(prevSplit!==inputDataSize){throw new Error("Last split value must be data size. Expected "+inputDataSize+", got "+prevSplit)}}var numBatchItems=splitsSize-1;var nGramsSplits=tfjsCore.util.getArrayFromDType("int32",splitsSize);if(inputDataSize===0||splitsSize===0){var empty=new Array(inputDataSize);for(var i=0;i<=numBatchItems;++i){nGramsSplits[i]=0}return[empty,nGramsSplits]}nGramsSplits[0]=0;var _loop_2=function(i){var length=splits[i]-splits[i-1];var numNGrams=0;this_2.nGramWidths.forEach(function(nGramWidth){numNGrams+=_this.getNumNGrams(length,nGramWidth)});if(this_2.preserveShort&&length>0&&numNGrams===0){numNGrams=1}nGramsSplits[i]=nGramsSplits[i-1]+numNGrams};var this_2=this;for(var i=1;i<=numBatchItems;++i){_loop_2(i)}var nGrams=new Array(nGramsSplits[numBatchItems]);var _loop_3=function(i){var splitIndex=splits[i];var outputStartIdx=nGramsSplits[i];this_3.nGramWidths.forEach(function(nGramWidth){var length=splits[i+1]-splits[i];var numNGrams=_this.getNumNGrams(length,nGramWidth);_this.createNGrams(data,splitIndex,nGrams,outputStartIdx,numNGrams,nGramWidth);outputStartIdx+=numNGrams});if(this_3.preserveShort&&outputStartIdx===nGramsSplits[i]){var dataLength=splits[i+1]-splits[i];if(dataLength===0){return"continue"}var nGramWidth=dataLength+2*this_3.padWidth;var numNGrams=1;this_3.createNGrams(data,splitIndex,nGrams,outputStartIdx,numNGrams,nGramWidth)}};var this_3=this;for(var i=0;i<numBatchItems;++i){_loop_3(i)}return[nGrams,nGramsSplits]};return StringNGramsOp}();function stringNGramsImpl(data,dataSplits,separator,nGramWidths,leftPad,rightPad,padWidth,preserveShortSequences){return new StringNGramsOp(separator,nGramWidths,leftPad,rightPad,padWidth,preserveShortSequences).compute(data,dataSplits)}function split(str,delimiters,skipEmpty,result){if(!str.length){return}if(delimiters.length===0){for(var i=0;i<str.length;++i){result.push(str.subarray(i,i+1))}return}if(delimiters.length===1){var delimiter=delimiters[0];var f=str.indexOf(delimiter);while(f!==-1){var token=str.subarray(0,f);if(!skipEmpty||token.length!==0){result.push(token)}str=str.subarray(f+1);f=str.indexOf(delimiter)}if(!skipEmpty||str.length!==0){result.push(str)}return}var tokenStart=0;for(var i=0;i<str.length+1;i++){if(i===str.length||delimiters.indexOf(str[i])!==-1){var token=str.subarray(tokenStart,i);if(!skipEmpty||token.length!==0){result.push(token)}tokenStart=i+1}}}function stringSplitImpl(input,delimiter,skipEmpty){var batchSize=input.length;var tokens=[];var outputSize=0;var maxNumEntries=0;var numIndices=new Array(batchSize);for(var i=0;i<batchSize;++i){var prevTokensLength=tokens.length;split(input[i],delimiter,skipEmpty,tokens);var nEntries=tokens.length-prevTokensLength;numIndices[i]=nEntries;outputSize+=nEntries;maxNumEntries=Math.max(maxNumEntries,nEntries)}var indices=tfjsCore.util.getArrayFromDType("int32",outputSize*2);var values=new Array(outputSize);var shape=[batchSize,maxNumEntries];var c=0;for(var i=0;i<batchSize;++i){for(var j=0;j<numIndices[i];++j){indices[c*2]=i;indices[c*2+1]=j;values[c]=tokens[c];++c}}return[indices,values,shape]}function stringToHashBucketFastImpl(input,numBuckets){var output=tfjsCore.util.getArrayFromDType("int32",input.length);for(var i=0;i<input.length;++i){output[i]=tfjsCore.util.fingerPrint64(input[i]).modulo(numBuckets).getLowBitsUnsigned()}return output}var subImpl=createSimpleBinaryKernelImpl(function(aValue,bValue){return aValue-bValue});var subComplexImpl=createComplexBinaryKernelImpl(function(aReal,aImag,bReal,bImag){return{real:aReal-bReal,imag:aImag-bImag}});var sub=binaryKernelFunc(tfjsCore.Sub,subImpl,subComplexImpl);var subConfig={kernelName:tfjsCore.Sub,backendName:"cpu",kernelFunc:sub};function tileImpl(xBuf,reps){var newShape=new Array(xBuf.rank);for(var i=0;i<newShape.length;i++){newShape[i]=xBuf.shape[i]*reps[i]}var result=tfjsCore.buffer(newShape,xBuf.dtype);for(var i=0;i<result.values.length;++i){var newLoc=result.indexToLoc(i);var originalLoc=new Array(xBuf.rank);for(var j=0;j<originalLoc.length;j++){originalLoc[j]=newLoc[j]%xBuf.shape[j]}var originalIndex=xBuf.locToIndex(originalLoc);result.values[i]=xBuf.values[originalIndex]}return result}var comparePair=function(a,b){var valueDiff=b.value-a.value;return valueDiff===0?a.index-b.index:valueDiff};function select$1(array,k,left,right){if(left===void 0){left=0}if(right===void 0){right=array.length-1}while(right>left){if(right-left>600){var n=right-left+1;var i_1=k-left+1;var z=Math.log(n);var s=.5*Math.exp(2*z/3);var sd=.5*Math.sqrt(z*s*(n-s)/n)*Math.sign(i_1-n/2);var newLeft=Math.max(left,Math.floor(k-i_1*s/n+sd));var newRight=Math.min(right,Math.floor(k+(n-i_1)*s/n+sd));select$1(array,k,newLeft,newRight)}var t=array[k];var i=left;var j=right;tfjsCore.util.swap(array,left,k);if(comparePair(array[right],t)>0){tfjsCore.util.swap(array,left,right)}while(i<j){tfjsCore.util.swap(array,i,j);i++;j--;while(comparePair(array[i],t)<0){i=i+1}while(comparePair(array[j],t)>0){j=j-1}}if(comparePair(array[left],t)===0){tfjsCore.util.swap(array,left,j)}else{j=j+1;tfjsCore.util.swap(array,j,right)}if(j<=k){left=j+1}if(k<=j){right=j-1}}}function topKImpl(x,xShape,xDtype,k,sorted){var lastDim=xShape[xShape.length-1];var _a=__read([x.length/lastDim,lastDim],2),batch=_a[0],size=_a[1];var allTopKVals=tfjsCore.util.getTypedArrayFromDType(xDtype,batch*k);var allTopKIndices=tfjsCore.util.getTypedArrayFromDType("int32",batch*k);var _loop_1=function(b){var offset=b*size;var vals=x.subarray(offset,offset+size);var valAndInd=new Array(vals.length);vals.forEach(function(value,index){return valAndInd[index]={value:value,index:index}});if(k<valAndInd.length){select$1(valAndInd,k);valAndInd=valAndInd.slice(0,k)}if(sorted){valAndInd.sort(comparePair)}var outOffset=b*k;var topKVals=allTopKVals.subarray(outOffset,outOffset+k);var topKIndices=allTopKIndices.subarray(outOffset,outOffset+k);for(var i=0;i<k;i++){topKVals[i]=valAndInd[i].value;topKIndices[i]=valAndInd[i].index}};for(var b=0;b<batch;b++){_loop_1(b)}var outputShape=xShape.slice();outputShape[outputShape.length-1]=k;return[tfjsCore.buffer(outputShape,xDtype,allTopKVals),tfjsCore.buffer(outputShape,"int32",allTopKIndices)]}function uniqueImpl(values,axis,shape,dtype){var $axis=tfjsCore.util.parseAxisParam(axis,shape)[0];var newShape=[1,shape[0],1];for(var i=0;i<$axis;i++){newShape[0]*=shape[i]}newShape[1]=shape[$axis];for(var i=$axis+1;i<shape.length;i++){newShape[2]*=shape[i]}var uniqueElements={};var indices=new Int32Array(shape[$axis]);var inputBuffer=new tfjsCore.TensorBuffer(newShape,dtype,values);var uniqueIndices=[];var is1DTensor=newShape[0]===1&&newShape[2]===1;for(var i=0;i<shape[$axis];i++){var element=void 0;if(is1DTensor){element=values[i].toString()}else{var axisValues=[];for(var m=0;m<newShape[0];m++){for(var n=0;n<newShape[2];n++){axisValues.push(inputBuffer.get(m,i,n))}}element=axisValues.join(",")}if(uniqueElements[element]!==undefined){indices[i]=uniqueElements[element]}else{var uniqueIndex=Object.keys(uniqueElements).length;uniqueElements[element]=uniqueIndex;indices[i]=uniqueIndex;uniqueIndices.push(i)}}var outputTmpShape=newShape.slice();outputTmpShape[1]=Object.keys(uniqueElements).length;var outputBuffer=new tfjsCore.TensorBuffer(outputTmpShape,dtype);uniqueIndices.forEach(function(uniqueElementIndex,i){for(var m=0;m<newShape[0];m++){for(var n=0;n<newShape[2];n++){outputBuffer.set(inputBuffer.get(m,uniqueElementIndex,n),m,i,n)}}});var outputShape=shape.slice();outputShape[$axis]=outputTmpShape[1];return{outputValues:outputBuffer.values,outputShape:outputShape,indices:indices}}var shared={__proto__:null,simpleAbsImpl:simpleAbsImpl,addImpl:addImpl,bincountImpl:bincountImpl,bincountReduceImpl:bincountReduceImpl,ceilImpl:ceilImpl,concatImpl:concatImpl,equalImpl:equalImpl,expImpl:expImpl,expm1Impl:expm1Impl,floorImpl:floorImpl,gatherNdImpl:gatherNdImpl,gatherV2Impl:gatherV2Impl,greaterImpl:greaterImpl,greaterEqualImpl:greaterEqualImpl,lessImpl:lessImpl,lessEqualImpl:lessEqualImpl,linSpaceImpl:linSpaceImpl,logImpl:logImpl,maxImpl:maxImpl,maximumImpl:maximumImpl,minimumImpl:minimumImpl,multiplyImpl:multiplyImpl,negImpl:negImpl,notEqualImpl:notEqualImpl,prodImpl:prodImpl,rangeImpl:rangeImpl,rsqrtImpl:rsqrtImpl,sigmoidImpl:sigmoidImpl,sliceImpl:sliceImpl,sparseFillEmptyRowsImpl:sparseFillEmptyRowsImpl,sparseReshapeImpl:sparseReshapeImpl,sparseSegmentReductionImpl:sparseSegmentReductionImpl,sqrtImpl:sqrtImpl,squaredDifferenceImpl:squaredDifferenceImpl,stridedSliceImpl:stridedSliceImpl,stringNGramsImpl:stringNGramsImpl,stringSplitImpl:stringSplitImpl,stringToHashBucketFastImpl:stringToHashBucketFastImpl,subImpl:subImpl,tileImpl:tileImpl,topKImpl:topKImpl,transposeImpl:transposeImpl,uniqueImpl:uniqueImpl};var version="3.10.0";tfjsCore.registerBackend("cpu",function(){return new MathBackendCPU},1);var elu=unaryKernelFunc(tfjsCore.Elu,function(xi){return xi>=0?xi:Math.exp(xi)-1});var eluConfig={kernelName:tfjsCore.Elu,backendName:"cpu",kernelFunc:elu};function leakyRelu(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var alpha=attrs.alpha;assertNotComplex([x],"leakyRelu");var xSize=tfjsCore.util.sizeFromShape(x.shape);var xVals=backend.data.get(x.dataId).values;var outVals=tfjsCore.util.getTypedArrayFromDType("float32",xSize);for(var i=0;i<xVals.length;i++){outVals[i]=xVals[i]<0?alpha*xVals[i]:xVals[i]}return backend.makeTensorInfo(x.shape,"float32",outVals)}var leakyReluConfig={kernelName:tfjsCore.LeakyRelu,backendName:"cpu",kernelFunc:leakyRelu};var preluImpl=createSimpleBinaryKernelImpl(function(xValue,aValue){return xValue<0?aValue*xValue:xValue});function prelu(args){var inputs=args.inputs,backend=args.backend;var x=inputs.x,alpha=inputs.alpha;assertNotComplex([x,alpha],"prelu");var aVals=backend.data.get(x.dataId).values;var bVals=backend.data.get(alpha.dataId).values;var _a=__read(preluImpl(x.shape,alpha.shape,aVals,bVals,"float32"),2),resultData=_a[0],resultShape=_a[1];return backend.makeTensorInfo(resultShape,"float32",resultData)}var preluConfig={kernelName:tfjsCore.Prelu,backendName:"cpu",kernelFunc:prelu};var relu=unaryKernelFunc(tfjsCore.Relu,function(xi){return Math.max(0,xi)});var reluConfig={kernelName:tfjsCore.Relu,backendName:"cpu",kernelFunc:relu};var relu6=unaryKernelFunc(tfjsCore.Relu6,function(xi){return Math.min(Math.max(0,xi),6)});var relu6Config={kernelName:tfjsCore.Relu6,backendName:"cpu",kernelFunc:relu6};function applyActivation(backend,x,activation,preluActivationWeights,leakyreluAlpha){if(activation==="linear"){return identity({inputs:{x:x},backend:backend})}else if(activation==="relu"){return relu({inputs:{x:x},backend:backend})}else if(activation==="elu"){return elu({inputs:{x:x},backend:backend})}else if(activation==="relu6"){return relu6({inputs:{x:x},backend:backend})}else if(activation==="prelu"){return prelu({inputs:{x:x,alpha:preluActivationWeights},backend:backend})}else if(activation==="leakyrelu"){return leakyRelu({inputs:{x:x},backend:backend,attrs:{alpha:leakyreluAlpha}})}else if(activation==="sigmoid"){return sigmoid({inputs:{x:x},backend:backend})}throw new Error("Activation "+activation+" has not been implemented for the CPU backend.")}function reshape(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var shape=attrs.shape;var xSize=tfjsCore.util.sizeFromShape(x.shape);var $shape=tfjsCore.util.inferFromImplicitShape(shape,xSize);var $xSize=tfjsCore.util.sizeFromShape($shape);tfjsCore.util.assert(xSize===$xSize,function(){return"The new shape ("+$shape+") has "+$xSize+" elements and the old "+("shape ("+x.shape+") has "+xSize+" elements. The new shape and old ")+"shape must have the same number of elements."});backend.incRef(x.dataId);var xData=backend.data.get(x.dataId);if(xData.complexTensorInfos!=null){var real=xData.complexTensorInfos.real;var imag=xData.complexTensorInfos.imag;real.shape=$shape;imag.shape=$shape}return{dataId:x.dataId,shape:$shape,dtype:x.dtype}}var reshapeConfig={kernelName:tfjsCore.Reshape,backendName:"cpu",kernelFunc:reshape};function batchMatMul(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var a=inputs.a,b=inputs.b;var transposeA=attrs.transposeA,transposeB=attrs.transposeB;assertNotComplex([a,b],"matMul");var aRank=a.shape.length;var bRank=b.shape.length;var innerShapeA=transposeA?a.shape[aRank-2]:a.shape[aRank-1];var innerShapeB=transposeB?b.shape[bRank-1]:b.shape[bRank-2];var outerShapeA=transposeA?a.shape[aRank-1]:a.shape[aRank-2];var outerShapeB=transposeB?b.shape[bRank-2]:b.shape[bRank-1];var outerDimsA=a.shape.slice(0,-2);var outerDimsB=b.shape.slice(0,-2);var batchDimA=tfjsCore.util.sizeFromShape(outerDimsA);var batchDimB=tfjsCore.util.sizeFromShape(outerDimsB);var batchDimsCompatible=batchDimA===batchDimB||batchDimA===1||batchDimB===1;tfjsCore.util.assert(aRank>=2&&bRank>=2&&batchDimsCompatible,function(){return"Error in matMul: the input batch dimensions must either be the "+"same or at least one input batch dimension must be 1. Got input "+("batch dimensions of ("+outerDimsA+") and ("+outerDimsB+").")});var outShapeOuterDims=batchDimA>batchDimB?a.shape.slice(0,-2):b.shape.slice(0,-2);var outShape=outShapeOuterDims.concat([outerShapeA,outerShapeB]);tfjsCore.util.assert(innerShapeA===innerShapeB,function(){return"Error in matMul: inner shapes ("+innerShapeA+") and ("+(innerShapeB+") of Tensors with shapes "+a.shape+" and ")+(b.shape+" and transposeA="+transposeA)+(" and transposeB="+transposeB+" must match.")});var a3dShape=transposeA?[batchDimA,innerShapeA,outerShapeA]:[batchDimA,outerShapeA,innerShapeA];var b3dShape=transposeB?[batchDimB,outerShapeB,innerShapeB]:[batchDimB,innerShapeB,outerShapeB];var a3d=reshape({inputs:{x:a},backend:backend,attrs:{shape:a3dShape}});var b3d=reshape({inputs:{x:b},backend:backend,attrs:{shape:b3dShape}});var sharedDim=transposeA?a3d.shape[1]:a3d.shape[2];var leftDim=transposeA?a3d.shape[2]:a3d.shape[1];var rightDim=transposeB?b3d.shape[1]:b3d.shape[2];var batchDim=Math.max(batchDimA,batchDimB);var a3dValues=backend.data.get(a3d.dataId).values;var b3dValues=backend.data.get(b3d.dataId).values;var a3dStrides=tfjsCore.util.computeStrides(a3d.shape);var b3dStrides=tfjsCore.util.computeStrides(b3d.shape);var _a=__read(transposeA?[a3dStrides[0],1,a3dStrides[1]]:[a3dStrides[0],a3dStrides[1],1],3),aBatch=_a[0],aOuterStep=_a[1],aInnerStep=_a[2];var _b=__read(transposeB?[1,b3dStrides[1],b3dStrides[0]]:[b3dStrides[1],1,b3dStrides[0]],3),bInnerStep=_b[0],bOuterStep=_b[1],bBatch=_b[2];var size=leftDim*rightDim;var result=tfjsCore.buffer([batchDim,leftDim,rightDim],a3d.dtype);var resVals=result.values;var blockSize=backend.blockSize;for(var bi=0;bi<batchDim;bi++){for(var i0=0;i0<leftDim;i0+=blockSize){for(var j0=0;j0<rightDim;j0+=blockSize){for(var k0=0;k0<sharedDim;k0+=blockSize){var iBlock=Math.min(i0+blockSize,leftDim);var jBlock=Math.min(j0+blockSize,rightDim);var kBlock=Math.min(k0+blockSize,sharedDim);for(var i=i0;i<iBlock;i++){for(var j=j0;j<jBlock;j++){var sum=0;for(var k=k0;k<kBlock;k++){var batchOffsetA=Math.min(bi,batchDimA-1)*aBatch;var batchOffsetB=Math.min(bi,batchDimB-1)*bBatch;var aVal=a3dValues[batchOffsetA+i*aOuterStep+k*aInnerStep];var bVal=b3dValues[k*bInnerStep+j*bOuterStep+batchOffsetB];sum+=aVal*bVal}resVals[bi*size+(i*rightDim+j)]+=sum}}}}}}backend.disposeIntermediateTensorInfo(a3d);backend.disposeIntermediateTensorInfo(b3d);return backend.makeTensorInfo(outShape,result.dtype,result.values)}var batchMatMulConfig={kernelName:tfjsCore.BatchMatMul,backendName:"cpu",kernelFunc:batchMatMul};function _fusedMatMul(args){var e_1,_a;var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var a=inputs.a,b=inputs.b,bias=inputs.bias,preluActivationWeights=inputs.preluActivationWeights;var transposeA=attrs.transposeA,transposeB=attrs.transposeB,activation=attrs.activation,leakyreluAlpha=attrs.leakyreluAlpha;var current;var addRes;var activationRes;var intermediates=[];var matMulRes=batchMatMul({inputs:{a:a,b:b},attrs:{transposeA:transposeA,transposeB:transposeB},backend:backend});current=matMulRes;if(bias){addRes=add({inputs:{a:current,b:bias},backend:backend});intermediates.push(current);current=addRes}if(activation){activationRes=applyActivation(backend,current,activation,preluActivationWeights,leakyreluAlpha);intermediates.push(current);current=activationRes}try{for(var intermediates_1=__values(intermediates),intermediates_1_1=intermediates_1.next();!intermediates_1_1.done;intermediates_1_1=intermediates_1.next()){var i=intermediates_1_1.value;backend.disposeIntermediateTensorInfo(i)}}catch(e_1_1){e_1={error:e_1_1}}finally{try{if(intermediates_1_1&&!intermediates_1_1.done&&(_a=intermediates_1.return))_a.call(intermediates_1)}finally{if(e_1)throw e_1.error}}return current}var _fusedMatMulConfig={kernelName:tfjsCore._FusedMatMul,backendName:"cpu",kernelFunc:_fusedMatMul};var acos=unaryKernelFunc(tfjsCore.Acos,function(xi){return Math.acos(xi)});var acosConfig={kernelName:tfjsCore.Acos,backendName:"cpu",kernelFunc:acos};var acosh=unaryKernelFunc(tfjsCore.Acosh,function(xi){return Math.acosh(xi)});var acoshConfig={kernelName:tfjsCore.Acosh,backendName:"cpu",kernelFunc:acosh};function addN(args){var inputs=args.inputs,backend=args.backend;var tensors=inputs;assertNotComplex(inputs,"addN");var vals=tensors.map(function(t){return backend.data.get(t.dataId).values});var outBuf=tfjsCore.buffer(tensors[0].shape,tensors[0].dtype);var outVals=outBuf.values;for(var i=0;i<tensors.length;i++){var currVals=vals[i];for(var j=0;j<outVals.length;j++){outVals[j]+=currVals[j]}}return backend.makeTensorInfo(outBuf.shape,outBuf.dtype,outBuf.values)}var addNConfig={kernelName:tfjsCore.AddN,backendName:"cpu",kernelFunc:addN};function all(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var axis=attrs.axis,keepDims=attrs.keepDims;assertNotComplex(x,"all");var origAxes=tfjsCore.util.parseAxisParam(axis,x.shape);var axes=origAxes;var permutedAxes=tfjsCore.backend_util.getAxesPermutation(axes,x.shape.length);var $x=x;if(permutedAxes!=null){$x=transpose({inputs:{x:x},backend:backend,attrs:{perm:permutedAxes}});axes=tfjsCore.backend_util.getInnerMostAxes(axes.length,x.shape.length)}tfjsCore.backend_util.assertAxesAreInnerMostDims("all",axes,$x.shape.length);var _a=__read(tfjsCore.backend_util.computeOutAndReduceShapes($x.shape,axes),2),outShape=_a[0],reduceShape=_a[1];var reduceSize=tfjsCore.util.sizeFromShape(reduceShape);var vals=tfjsCore.util.makeZerosTypedArray(tfjsCore.util.sizeFromShape(outShape),$x.dtype);var aVals=backend.data.get($x.dataId).values;for(var i=0;i<vals.length;++i){var offset=i*reduceSize;var all_1=aVals[offset];for(var j=0;j<reduceSize;++j){var value=aVals[offset+j];all_1=all_1&&value}vals[i]=all_1}if(permutedAxes!=null){backend.disposeIntermediateTensorInfo($x)}var result=backend.makeTensorInfo(outShape,$x.dtype,vals);if(keepDims){var expandedShape=tfjsCore.backend_util.expandShapeToKeepDim(outShape,origAxes);var reshapedResult=reshape({inputs:{x:result},backend:backend,attrs:{shape:expandedShape}});backend.disposeIntermediateTensorInfo(result);return reshapedResult}return result}var allConfig={kernelName:tfjsCore.All,backendName:"cpu",kernelFunc:all};function any(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var axis=attrs.axis,keepDims=attrs.keepDims;assertNotComplex(x,"any");var origAxes=tfjsCore.util.parseAxisParam(axis,x.shape);var axes=origAxes;var permutedAxes=tfjsCore.backend_util.getAxesPermutation(axes,x.shape.length);var $x=x;if(permutedAxes!=null){$x=transpose({inputs:{x:x},backend:backend,attrs:{perm:permutedAxes}});axes=tfjsCore.backend_util.getInnerMostAxes(axes.length,x.shape.length)}tfjsCore.backend_util.assertAxesAreInnerMostDims("any",axes,$x.shape.length);var _a=__read(tfjsCore.backend_util.computeOutAndReduceShapes($x.shape,axes),2),outShape=_a[0],reduceShape=_a[1];var reduceSize=tfjsCore.util.sizeFromShape(reduceShape);var vals=tfjsCore.util.makeZerosTypedArray(tfjsCore.util.sizeFromShape(outShape),$x.dtype);var aVals=backend.data.get($x.dataId).values;for(var i=0;i<vals.length;++i){var offset=i*reduceSize;var anyVal=aVals[offset];for(var j=0;j<reduceSize;++j){var value=aVals[offset+j];anyVal=anyVal||value}vals[i]=anyVal}if(permutedAxes!=null){backend.disposeIntermediateTensorInfo($x)}var result=backend.makeTensorInfo(outShape,$x.dtype,vals);if(keepDims){var expandedShape=tfjsCore.backend_util.expandShapeToKeepDim(outShape,origAxes);var reshapedResult=reshape({inputs:{x:result},backend:backend,attrs:{shape:expandedShape}});backend.disposeIntermediateTensorInfo(result);return reshapedResult}return result}var anyConfig={kernelName:tfjsCore.Any,backendName:"cpu",kernelFunc:any};function argMax(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var axis=attrs.axis;assertNotComplex(x,"argMax");var axes=tfjsCore.util.parseAxisParam(axis,x.shape);var permutedAxes=tfjsCore.backend_util.getAxesPermutation(axes,x.shape.length);var $x=x;var intermediateTensorInfos=[];if(permutedAxes!=null){$x=transpose({inputs:{x:x},backend:backend,attrs:{perm:permutedAxes}});intermediateTensorInfos.push($x);axes=tfjsCore.backend_util.getInnerMostAxes(axes.length,$x.shape.length)}axes=[axes[0]];tfjsCore.backend_util.assertAxesAreInnerMostDims("argMax",axes,$x.shape.length);var _a=__read(tfjsCore.backend_util.computeOutAndReduceShapes($x.shape,axes),2),outShape=_a[0],reduceShape=_a[1];var outSize=tfjsCore.util.sizeFromShape(outShape);var vals=tfjsCore.util.makeZerosTypedArray(outSize,"int32");var reduceSize=tfjsCore.util.sizeFromShape(reduceShape);var aVals=backend.data.get($x.dataId).values;for(var i=0;i<vals.length;++i){var offset=i*reduceSize;var max=aVals[offset];var maxIndex=0;for(var j=0;j<reduceSize;++j){var value=aVals[offset+j];if(value>max){max=value;maxIndex=j}}vals[i]=maxIndex}intermediateTensorInfos.forEach(function(t){return backend.disposeIntermediateTensorInfo(t)});return backend.makeTensorInfo(outShape,"int32",vals)}var argMaxConfig={kernelName:tfjsCore.ArgMax,backendName:"cpu",kernelFunc:argMax};function argMin(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var axis=attrs.axis;assertNotComplex(x,"argMin");var axes=tfjsCore.util.parseAxisParam(axis,x.shape);var permutedAxes=tfjsCore.backend_util.getAxesPermutation(axes,x.shape.length);var $x=x;var intermediateTensorInfos=[];if(permutedAxes!=null){$x=transpose({inputs:{x:x},backend:backend,attrs:{perm:permutedAxes}});intermediateTensorInfos.push($x);axes=tfjsCore.backend_util.getInnerMostAxes(axes.length,$x.shape.length)}axes=[axes[0]];tfjsCore.backend_util.assertAxesAreInnerMostDims("argMin",axes,$x.shape.length);var _a=__read(tfjsCore.backend_util.computeOutAndReduceShapes($x.shape,axes),2),outShape=_a[0],reduceShape=_a[1];var outSize=tfjsCore.util.sizeFromShape(outShape);var vals=tfjsCore.util.makeZerosTypedArray(outSize,"int32");var reduceSize=tfjsCore.util.sizeFromShape(reduceShape);var aVals=backend.data.get($x.dataId).values;for(var i=0;i<vals.length;++i){var offset=i*reduceSize;var min=aVals[offset];var minIndex=0;for(var j=0;j<reduceSize;++j){var value=aVals[offset+j];if(value<min){min=value;minIndex=j}}vals[i]=minIndex}intermediateTensorInfos.forEach(function(t){return backend.disposeIntermediateTensorInfo(t)});return backend.makeTensorInfo(outShape,"int32",vals)}var argMinConfig={kernelName:tfjsCore.ArgMin,backendName:"cpu",kernelFunc:argMin};var asin=unaryKernelFunc(tfjsCore.Asin,function(xi){return Math.asin(xi)});var asinConfig={kernelName:tfjsCore.Asin,backendName:"cpu",kernelFunc:asin};var asinh=unaryKernelFunc(tfjsCore.Asinh,function(xi){return Math.asinh(xi)});var asinhConfig={kernelName:tfjsCore.Asinh,backendName:"cpu",kernelFunc:asinh};var atan=unaryKernelFunc(tfjsCore.Atan,function(xi){return Math.atan(xi)});var atanConfig={kernelName:tfjsCore.Atan,backendName:"cpu",kernelFunc:atan};var atan2Impl=createSimpleBinaryKernelImpl(function(aValue,bValue){return Math.atan2(aValue,bValue)});var atan2=binaryKernelFunc(tfjsCore.Atan2,atan2Impl);var atan2Config={kernelName:tfjsCore.Atan2,backendName:"cpu",kernelFunc:atan2};var atanh=unaryKernelFunc(tfjsCore.Atanh,function(xi){return Math.atanh(xi)});var atanhConfig={kernelName:tfjsCore.Atanh,backendName:"cpu",kernelFunc:atanh};function pool(xValues,xShape,dtype,strides,convInfo,poolType){var strideHeight=convInfo.strideHeight;var strideWidth=convInfo.strideWidth;var dilationHeight=convInfo.dilationHeight;var dilationWidth=convInfo.dilationWidth;var effectiveFilterHeight=convInfo.effectiveFilterHeight;var effectiveFilterWidth=convInfo.effectiveFilterWidth;var padTop=convInfo.padInfo.top;var padLeft=convInfo.padInfo.left;var initialValue=poolType==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY;var output=tfjsCore.buffer(convInfo.outShape,dtype);var outputVals=output.values;var outputBatchStrides=convInfo.outShape[1]*convInfo.outShape[2]*convInfo.outShape[3];var outputRowStrides=convInfo.outShape[2]*convInfo.outShape[3];var outputColStrides=convInfo.outShape[3];for(var b=0;b<convInfo.batchSize;++b){var outputBatchOffset=b*outputBatchStrides;var inputBatchOffset=b*strides[0];for(var d=0;d<convInfo.inChannels;++d){for(var yR=0;yR<convInfo.outHeight;++yR){var xRCorner=yR*strideHeight-padTop;var xRMin=Math.max(0,xRCorner);var xRMax=Math.min(convInfo.inHeight,effectiveFilterHeight+xRCorner);var outputRowOffset=outputBatchOffset+yR*outputRowStrides;for(var yC=0;yC<convInfo.outWidth;++yC){var xCCorner=yC*strideWidth-padLeft;var xCMin=Math.max(0,xCCorner);var xCMax=Math.min(convInfo.inWidth,effectiveFilterWidth+xCCorner);var minMaxValue=initialValue;var avgValue=0;var count=0;for(var xR=xRMin;xR<xRMax;xR+=dilationHeight){var xROffset=inputBatchOffset+xR*strides[1];for(var xC=xCMin;xC<xCMax;xC+=dilationWidth){var xCOffset=xROffset+xC*strides[2];var pixel=xValues[xCOffset+d];if(poolType==="max"&&pixel>minMaxValue){minMaxValue=pixel}else if(poolType==="avg"){avgValue+=pixel;count++}}if(isNaN(minMaxValue)){break}}var outputOffset=outputRowOffset+yC*outputColStrides+d;outputVals[outputOffset]=poolType==="avg"?avgValue/count:minMaxValue}}}}return output}function maxPoolPositions(xValues,xShape,dtype,convInfo,flattenPositions,includeBatchInIndex){if(flattenPositions===void 0){flattenPositions=false}if(includeBatchInIndex===void 0){includeBatchInIndex=false}var maxPositions=tfjsCore.buffer(convInfo.outShape,"int32");var strideHeight=convInfo.strideHeight;var strideWidth=convInfo.strideWidth;var dilationHeight=convInfo.dilationHeight;var dilationWidth=convInfo.dilationWidth;var effectiveFilterHeight=convInfo.effectiveFilterHeight;var effectiveFilterWidth=convInfo.effectiveFilterWidth;var padTop=convInfo.padInfo.top;var padLeft=convInfo.padInfo.left;var xBuf=tfjsCore.buffer(xShape,dtype,xValues);for(var b=0;b<convInfo.batchSize;++b){for(var d=0;d<convInfo.inChannels;++d){for(var yR=0;yR<convInfo.outHeight;++yR){var xRCorner=yR*strideHeight-padTop;var xRMin=xRCorner;while(xRMin<0){xRMin+=dilationHeight}var xRMax=Math.min(convInfo.inHeight,effectiveFilterHeight+xRCorner);for(var yC=0;yC<convInfo.outWidth;++yC){var xCCorner=yC*strideWidth-padLeft;var xCMin=xCCorner;while(xCMin<0){xCMin+=dilationWidth}var xCMax=Math.min(convInfo.inWidth,effectiveFilterWidth+xCCorner);var maxValue=Number.NEGATIVE_INFINITY;var maxPosition=-1;for(var xR=xRMin;xR<xRMax;xR+=dilationHeight){var wR=xR-xRCorner;for(var xC=xCMin;xC<xCMax;xC+=dilationWidth){var wC=xC-xCCorner;var pixel=xBuf.get(b,xR,xC,d);if(pixel>maxValue){maxValue=pixel;if(flattenPositions){maxPosition=includeBatchInIndex?((b*convInfo.inHeight+xR)*convInfo.inWidth+xC)*convInfo.inChannels+d:(xR*convInfo.inWidth+xC)*convInfo.inChannels+d}else{maxPosition=wR*effectiveFilterWidth+wC}}}}maxPositions.set(maxPosition,b,yR,yC,d)}}}}return maxPositions}function pool3d(xValues,xShape,dtype,strides,convInfo,poolType){var strideDepth=convInfo.strideDepth;var strideHeight=convInfo.strideHeight;var strideWidth=convInfo.strideWidth;var dilationDepth=convInfo.dilationDepth;var dilationHeight=convInfo.dilationHeight;var dilationWidth=convInfo.dilationWidth;var effectiveFilterDepth=convInfo.effectiveFilterDepth;var effectiveFilterHeight=convInfo.effectiveFilterHeight;var effectiveFilterWidth=convInfo.effectiveFilterWidth;var padFront=convInfo.padInfo.front;var padTop=convInfo.padInfo.top;var padLeft=convInfo.padInfo.left;var initialValue=poolType==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY;var output=tfjsCore.buffer(convInfo.outShape,dtype);var outputVals=output.values;var outputBatchStrides=convInfo.outShape[1]*convInfo.outShape[2]*convInfo.outShape[3]*convInfo.outShape[4];var outputDepthStrides=convInfo.outShape[2]*convInfo.outShape[3]*convInfo.outShape[4];var outputRowStrides=convInfo.outShape[3]*convInfo.outShape[4];var outputColStrides=convInfo.outShape[4];for(var batch=0;batch<convInfo.batchSize;++batch){var outputBatchOffset=batch*outputBatchStrides;var inputBatchOffset=batch*strides[0];for(var channel=0;channel<convInfo.inChannels;++channel){for(var yDepth=0;yDepth<convInfo.outDepth;++yDepth){var xDepthCorner=yDepth*strideDepth-padFront;var xDepthMin=xDepthCorner;while(xDepthMin<0){xDepthMin+=dilationDepth}var xDepthMax=Math.min(convInfo.inDepth,effectiveFilterDepth+xDepthCorner);var outputDepthOffset=outputBatchOffset+yDepth*outputDepthStrides;for(var yRow=0;yRow<convInfo.outHeight;++yRow){var xRowCorner=yRow*strideHeight-padTop;var xRowMin=xRowCorner;while(xRowMin<0){xRowMin+=dilationHeight}var xRowMax=Math.min(convInfo.inHeight,effectiveFilterHeight+xRowCorner);var outputRowOffset=outputDepthOffset+yRow*outputRowStrides;for(var yCol=0;yCol<convInfo.outWidth;++yCol){var xColCorner=yCol*strideWidth-padLeft;var xColMin=xColCorner;while(xColMin<0){xColMin+=dilationWidth}var xColMax=Math.min(convInfo.inWidth,effectiveFilterWidth+xColCorner);var outputColOffset=outputRowOffset+yCol*outputColStrides;var minMaxValue=initialValue;var avgValue=0;var count=0;for(var xDepth=xDepthMin;xDepth<xDepthMax;xDepth+=dilationDepth){var xDepthOffset=inputBatchOffset+xDepth*strides[1];for(var xRow=xRowMin;xRow<xRowMax;xRow+=dilationHeight){var xRowOffset=xDepthOffset+xRow*strides[2];for(var xCol=xColMin;xCol<xColMax;xCol+=dilationWidth){var xColOffset=xRowOffset+xCol*strides[3];var pixel=xValues[xColOffset+channel];if(poolType==="max"&&pixel>minMaxValue){minMaxValue=pixel}else if(poolType==="avg"){avgValue+=pixel;count++}if(isNaN(minMaxValue)){break}}if(isNaN(minMaxValue)){break}}if(isNaN(minMaxValue)){break}}var outputOffset=outputColOffset+channel;outputVals[outputOffset]=poolType==="avg"?avgValue/count:minMaxValue}}}}}return output}function maxPool3dPositions(xBuf,convInfo){var maxPositions=tfjsCore.buffer(convInfo.outShape,"int32");var strideDepth=convInfo.strideDepth;var strideHeight=convInfo.strideHeight;var strideWidth=convInfo.strideWidth;var dilationDepth=convInfo.dilationDepth;var dilationHeight=convInfo.dilationHeight;var dilationWidth=convInfo.dilationWidth;var effectiveFilterDepth=convInfo.effectiveFilterDepth;var effectiveFilterHeight=convInfo.effectiveFilterHeight;var effectiveFilterWidth=convInfo.effectiveFilterWidth;var padFront=convInfo.padInfo.front;var padTop=convInfo.padInfo.top;var padLeft=convInfo.padInfo.left;for(var batch=0;batch<convInfo.batchSize;++batch){for(var channel=0;channel<convInfo.inChannels;++channel){for(var yDepth=0;yDepth<convInfo.outDepth;++yDepth){var xDepthCorner=yDepth*strideDepth-padFront;var xDepthMin=xDepthCorner;while(xDepthMin<0){xDepthMin+=dilationDepth}var xDepthMax=Math.min(convInfo.inDepth,effectiveFilterDepth+xDepthCorner);for(var yRow=0;yRow<convInfo.outHeight;++yRow){var xRowCorner=yRow*strideHeight-padTop;var xRowMin=xRowCorner;while(xRowMin<0){xRowMin+=dilationHeight}var xRowMax=Math.min(convInfo.inHeight,effectiveFilterHeight+xRowCorner);for(var yCol=0;yCol<convInfo.outWidth;++yCol){var xColCorner=yCol*strideWidth-padLeft;var xColMin=xColCorner;while(xColMin<0){xColMin+=dilationWidth}var xColMax=Math.min(convInfo.inWidth,effectiveFilterWidth+xColCorner);var maxValue=Number.NEGATIVE_INFINITY;var maxPosition=-1;for(var xDepth=xDepthMin;xDepth<xDepthMax;xDepth+=dilationDepth){var wDepth=xDepth-xDepthCorner;for(var xRow=xRowMin;xRow<xRowMax;xRow+=dilationHeight){var wRow=xRow-xRowCorner;for(var xCol=xColMin;xCol<xColMax;xCol+=dilationWidth){var wCol=xCol-xColCorner;var pixel=xBuf.get(batch,xDepth,xRow,xCol,channel);if(pixel>=maxValue){maxValue=pixel;maxPosition=wDepth*effectiveFilterHeight*effectiveFilterWidth+wRow*effectiveFilterHeight+wCol}}}}maxPositions.set(maxPosition,batch,yDepth,yRow,yCol,channel)}}}}}return maxPositions}function avgPool(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;assertNotComplex(x,"avgPool");var filterSize=attrs.filterSize,strides=attrs.strides,pad=attrs.pad,dimRoundingMode=attrs.dimRoundingMode;var dilations=1;tfjsCore.util.assert(tfjsCore.backend_util.eitherStridesOrDilationsAreOne(strides,dilations),function(){return"Error in avgPool: Either strides or dilations must be 1. "+("Got strides "+strides+" and dilations '"+dilations+"'")});var convInfo=tfjsCore.backend_util.computePool2DInfo(x.shape,filterSize,strides,dilations,pad,dimRoundingMode);var res;if(convInfo.filterWidth===1&&convInfo.filterHeight===1&&tfjsCore.util.arraysEqual(convInfo.inShape,convInfo.outShape)){res=identity({inputs:{x:x},backend:backend})}else{var xValues=backend.data.get(x.dataId).values;var strides_1=tfjsCore.util.computeStrides(x.shape);var buffer=pool(xValues,x.shape,x.dtype,strides_1,convInfo,"avg");res=backend.makeTensorInfo(convInfo.outShape,x.dtype,buffer.values)}return res}var avgPoolConfig={kernelName:tfjsCore.AvgPool,backendName:"cpu",kernelFunc:avgPool};function avgPool3D(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var filterSize=attrs.filterSize,strides=attrs.strides,pad=attrs.pad,dimRoundingMode=attrs.dimRoundingMode,dataFormat=attrs.dataFormat;assertNotComplex(x,"avgPool3d");var convInfo=tfjsCore.backend_util.computePool3DInfo(x.shape,filterSize,strides,1,pad,dimRoundingMode,dataFormat);var xValues=backend.data.get(x.dataId).values;var outBuf=pool3d(xValues,x.shape,x.dtype,tfjsCore.util.computeStrides(x.shape),convInfo,"avg");return backend.makeTensorInfo(outBuf.shape,"float32",outBuf.values)}var avgPool3DConfig={kernelName:tfjsCore.AvgPool3D,backendName:"cpu",kernelFunc:avgPool3D};function avgPool3DGrad(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var dy=inputs.dy,input=inputs.input;var filterSize=attrs.filterSize,strides=attrs.strides,pad=attrs.pad,dimRoundingMode=attrs.dimRoundingMode;assertNotComplex([dy,input],"avgPool3DGrad");var convInfo=tfjsCore.backend_util.computePool3DInfo(input.shape,filterSize,strides,1,pad,dimRoundingMode);var strideDepth=convInfo.strideDepth;var strideHeight=convInfo.strideHeight;var strideWidth=convInfo.strideWidth;var filterDepth=convInfo.filterDepth;var filterHeight=convInfo.filterHeight;var filterWidth=convInfo.filterWidth;var dilationDepth=convInfo.dilationDepth;var dilationHeight=convInfo.dilationHeight;var dilationWidth=convInfo.dilationWidth;var effectiveFilterDepth=convInfo.effectiveFilterDepth;var effectiveFilterHeight=convInfo.effectiveFilterHeight;var effectiveFilterWidth=convInfo.effectiveFilterWidth;var padFront=effectiveFilterDepth-1-convInfo.padInfo.front;var padLeft=effectiveFilterWidth-1-convInfo.padInfo.left;var padTop=effectiveFilterHeight-1-convInfo.padInfo.top;var dx=tfjsCore.buffer(input.shape,"float32");var avgMultiplier=1/(filterDepth*filterHeight*filterWidth);var dyBuf=backend.bufferSync(dy);for(var batch=0;batch<convInfo.batchSize;++batch){for(var channel=0;channel<convInfo.inChannels;++channel){for(var dxDepth=0;dxDepth<convInfo.inDepth;++dxDepth){for(var dxRow=0;dxRow<convInfo.inHeight;++dxRow){for(var dxCol=0;dxCol<convInfo.inWidth;++dxCol){var dyDepthCorner=dxDepth-padFront;var dyRowCorner=dxRow-padTop;var dyColCorner=dxCol-padLeft;var dotProd=0;for(var wDepth=0;wDepth<effectiveFilterDepth;wDepth+=dilationDepth){var dyDepth=(dyDepthCorner+wDepth)/strideDepth;if(dyDepth<0||dyDepth>=convInfo.outDepth||Math.floor(dyDepth)!==dyDepth){continue}for(var wRow=0;wRow<effectiveFilterHeight;wRow+=dilationHeight){var dyRow=(dyRowCorner+wRow)/strideHeight;if(dyRow<0||dyRow>=convInfo.outHeight||Math.floor(dyRow)!==dyRow){continue}for(var wCol=0;wCol<effectiveFilterWidth;wCol+=dilationWidth){var dyCol=(dyColCorner+wCol)/strideWidth;if(dyCol<0||dyCol>=convInfo.outWidth||Math.floor(dyCol)!==dyCol){continue}var pixel=dyBuf.get(batch,dyDepth,dyRow,dyCol,channel);dotProd+=pixel}}}dx.set(dotProd*avgMultiplier,batch,dxDepth,dxRow,dxCol,channel)}}}}}return backend.makeTensorInfo(dx.shape,dx.dtype,dx.values)}var avgPool3DGradConfig={kernelName:tfjsCore.AvgPool3DGrad,backendName:"cpu",kernelFunc:avgPool3DGrad};function avgPoolGrad(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var dy=inputs.dy,input=inputs.input;var x=input;assertNotComplex([dy,input],"avgPoolGrad");var filterSize=attrs.filterSize,strides=attrs.strides,pad=attrs.pad;var convInfo=tfjsCore.backend_util.computePool2DInfo(x.shape,filterSize,strides,1,pad);var strideHeight=convInfo.strideHeight;var strideWidth=convInfo.strideWidth;var filterHeight=convInfo.filterHeight;var filterWidth=convInfo.filterWidth;var dilationHeight=convInfo.dilationHeight;var dilationWidth=convInfo.dilationWidth;var effectiveFilterHeight=convInfo.effectiveFilterHeight;var effectiveFilterWidth=convInfo.effectiveFilterWidth;var padLeft=effectiveFilterWidth-1-convInfo.padInfo.left;var padTop=effectiveFilterHeight-1-convInfo.padInfo.top;var dx=tfjsCore.buffer(x.shape,"float32");var avgMultiplier=1/(filterHeight*filterWidth);var dyData=backend.data.get(dy.dataId).values;var dyBuf=tfjsCore.buffer(dy.shape,"float32",dyData);for(var b=0;b<convInfo.batchSize;++b){for(var d=0;d<convInfo.inChannels;++d){for(var dxR=0;dxR<convInfo.inHeight;++dxR){for(var dxC=0;dxC<convInfo.inWidth;++dxC){var dyRCorner=dxR-padTop;var dyCCorner=dxC-padLeft;var dotProd=0;for(var wR=0;wR<effectiveFilterHeight;wR+=dilationHeight){var dyR=(dyRCorner+wR)/strideHeight;if(dyR<0||dyR>=convInfo.outHeight||Math.floor(dyR)!==dyR){continue}for(var wC=0;wC<effectiveFilterWidth;wC+=dilationWidth){var dyC=(dyCCorner+wC)/strideWidth;if(dyC<0||dyC>=convInfo.outWidth||Math.floor(dyC)!==dyC){continue}var pixel=dyBuf.get(b,dyR,dyC,d);dotProd+=pixel}}dx.set(dotProd*avgMultiplier,b,dxR,dxC,d)}}}}return backend.makeTensorInfo(dx.shape,dx.dtype,dx.values)}var avgPoolGradConfig={kernelName:tfjsCore.AvgPoolGrad,backendName:"cpu",kernelFunc:avgPoolGrad};function batchNorm(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,scale=inputs.scale,offset=inputs.offset,mean=inputs.mean,variance=inputs.variance;tfjsCore.util.assert(mean.shape.length===variance.shape.length,function(){return"Batch normalization gradient requires mean and variance to have "+"equal ranks."});tfjsCore.util.assert(offset==null||mean.shape.length===offset.shape.length,function(){return"Batch normalization gradient requires mean and offset to have "+"equal ranks."});tfjsCore.util.assert(scale==null||mean.shape.length===scale.shape.length,function(){return"Batch normalization gradient requires mean and scale to have "+"equal ranks."});assertNotComplex([x,mean,variance,scale,offset],"batchNorm");var varianceEpsilon=attrs.varianceEpsilon;if(varianceEpsilon==null){varianceEpsilon=.001}var xVals=backend.data.get(x.dataId).values;var mVals=backend.data.get(mean.dataId).values;var varVals=backend.data.get(variance.dataId).values;var sVals=scale?backend.data.get(scale.dataId).values:new Float32Array([1]);var offVals=offset?backend.data.get(offset.dataId).values:new Float32Array([0]);var outVals=new Float32Array(xVals.length);var offValsLength=offVals.length;var sValsLength=sVals.length;var varValsLength=varVals.length;var mValsLength=mVals.length;var offi=0;var mi=0;var si=0;var vi=0;for(var i=0;i<xVals.length;++i){outVals[i]=offVals[offi++]+(xVals[i]-mVals[mi++])*sVals[si++]/Math.sqrt(varVals[vi++]+varianceEpsilon);if(offi>=offValsLength){offi=0}if(mi>=mValsLength){mi=0}if(si>=sValsLength){si=0}if(vi>=varValsLength){vi=0}}return backend.makeTensorInfo(x.shape,x.dtype,outVals)}var batchNormConfig={kernelName:tfjsCore.FusedBatchNorm,backendName:"cpu",kernelFunc:batchNorm};function batchToSpaceND(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var blockShape=attrs.blockShape,crops=attrs.crops;assertNotComplex([x],"batchToSpaceND");var prod=blockShape.reduce(function(a,b){return a*b});var reshaped=tfjsCore.backend_util.getReshaped(x.shape,blockShape,prod);var permuted=tfjsCore.backend_util.getPermuted(reshaped.length,blockShape.length);var reshapedPermuted=tfjsCore.backend_util.getReshapedPermuted(x.shape,blockShape,prod);var sliceBeginCoords=tfjsCore.backend_util.getSliceBeginCoords(crops,blockShape.length);var sliceSize=tfjsCore.backend_util.getSliceSize(reshapedPermuted,crops,blockShape.length);var xReshaped=reshape({inputs:{x:x},backend:backend,attrs:{shape:reshaped}});var xTransposed=transpose({inputs:{x:xReshaped},backend:backend,attrs:{perm:permuted}});var xTransposedReshaped=reshape({inputs:{x:xTransposed},backend:backend,attrs:{shape:reshapedPermuted}});var result=slice({inputs:{x:xTransposedReshaped},backend:backend,attrs:{begin:sliceBeginCoords,size:sliceSize}});backend.disposeIntermediateTensorInfo(xReshaped);backend.disposeIntermediateTensorInfo(xTransposed);backend.disposeIntermediateTensorInfo(xTransposedReshaped);return result}var batchToSpaceNDConfig={kernelName:tfjsCore.BatchToSpaceND,backendName:"cpu",kernelFunc:batchToSpaceND};function bincount(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,weights=inputs.weights;var size=attrs.size;var xVals=backend.data.get(x.dataId).values;var weightsVals=backend.data.get(weights.dataId).values;var outVals=bincountImpl(xVals,weightsVals,weights.dtype,weights.shape,size);return backend.makeTensorInfo([size],weights.dtype,outVals)}var bincountConfig={kernelName:tfjsCore.Bincount,backendName:"cpu",kernelFunc:bincount};function broadcastArgs(args){var inputs=args.inputs,backend=args.backend;var s0=inputs.s0,s1=inputs.s1;var s0Vals=backend.data.get(s0.dataId).values;var s1Vals=backend.data.get(s1.dataId).values;var broadcastShape=tfjsCore.backend_util.assertAndGetBroadcastShape(Array.from(s0Vals),Array.from(s1Vals));return backend.makeTensorInfo([broadcastShape.length],"int32",Int32Array.from(broadcastShape))}var broadcastArgsConfig={kernelName:tfjsCore.BroadcastArgs,backendName:"cpu",kernelFunc:broadcastArgs};var clip=unaryKernelFunc(tfjsCore.ClipByValue,function(xi,attrs){var clipAttrs=attrs;if(xi>clipAttrs.clipValueMax){return clipAttrs.clipValueMax}return xi<clipAttrs.clipValueMin?clipAttrs.clipValueMin:xi});var clipConfig={kernelName:tfjsCore.ClipByValue,backendName:"cpu",kernelFunc:clip};var complexAbs=function(args){var x=args.inputs.x;var cpuBackend=args.backend;var resultValues=new Float32Array(tfjsCore.util.sizeFromShape(x.shape));var complexVals=cpuBackend.data.get(x.dataId);var real=complexVals.complexTensorInfos.real;var imag=complexVals.complexTensorInfos.imag;var realVals=cpuBackend.data.get(real.dataId).values;var imagVals=cpuBackend.data.get(imag.dataId).values;for(var i=0;i<realVals.length;i++){var real_1=realVals[i];var imag_1=imagVals[i];resultValues[i]=Math.hypot(real_1,imag_1)}return cpuBackend.makeOutput(resultValues,x.shape,"float32")};var complexAbsConfig={kernelName:tfjsCore.ComplexAbs,backendName:"cpu",kernelFunc:complexAbs};function imag(args){var inputs=args.inputs,backend=args.backend;var input=inputs.input;var imag=backend.data.get(input.dataId).complexTensorInfos.imag;var imagVal=backend.data.get(imag.dataId).values;return backend.makeTensorInfo(imag.shape,imag.dtype,imagVal)}var imagConfig={kernelName:tfjsCore.Imag,backendName:"cpu",kernelFunc:imag};function concat(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var axis=attrs.axis;var $axis=tfjsCore.util.parseAxisParam(axis,inputs[0].shape)[0];var outShape=tfjsCore.backend_util.computeOutShape(inputs.map(function(t){return t.shape}),$axis);if(tfjsCore.util.sizeFromShape(outShape)===0){return backend.makeTensorInfo(outShape,inputs[0].dtype,[])}var $inputs=inputs.filter(function(t){return tfjsCore.util.sizeFromShape(t.shape)>0});if($inputs.length===1){return identity({inputs:{x:$inputs[0]},backend:backend})}var shapes=$inputs.map(function(t){return t.shape});tfjsCore.backend_util.assertParamsConsistent(shapes,$axis);if($inputs[0].dtype==="complex64"){var reals=$inputs.map(function(t){return real({inputs:{input:t},backend:backend})});var imags=$inputs.map(function(t){return imag({inputs:{input:t},backend:backend})});var realConcated=concat({inputs:reals,backend:backend,attrs:{axis:$axis}});var imagConcated=concat({inputs:imags,backend:backend,attrs:{axis:$axis}});var result=complex({inputs:{real:realConcated,imag:imagConcated},backend:backend});reals.forEach(function(r){return backend.disposeIntermediateTensorInfo(r)});imags.forEach(function(i){return backend.disposeIntermediateTensorInfo(i)});backend.disposeIntermediateTensorInfo(realConcated);backend.disposeIntermediateTensorInfo(imagConcated);return result}var inputs2D=$inputs.map(function(t){var innerSize=tfjsCore.util.sizeFromShape(t.shape.slice($axis));var shape=[-1,innerSize];return reshape({inputs:{x:t},backend:backend,attrs:{shape:shape}})});var inputsValShapes=inputs2D.map(function(t){return{vals:backend.data.get(t.dataId).values,shape:t.shape}});outShape=tfjsCore.backend_util.computeOutShape(inputs2D.map(function(t){return t.shape}),1);var simplyConcat=inputs2D[0].shape[0]===1;var outVals=concatImpl(inputsValShapes,outShape,inputs[0].dtype,simplyConcat);var finalOutShape=tfjsCore.backend_util.computeOutShape($inputs.map(function(t){return t.shape}),$axis);var outInfo=backend.makeTensorInfo(finalOutShape,inputs[0].dtype,outVals);inputs2D.forEach(function(t){return backend.disposeIntermediateTensorInfo(t)});return outInfo}var concatConfig={kernelName:tfjsCore.Concat,backendName:"cpu",kernelFunc:concat};function conv2D(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,filter=inputs.filter;var strides=attrs.strides,pad=attrs.pad,dataFormat=attrs.dataFormat,dilations=attrs.dilations,dimRoundingMode=attrs.dimRoundingMode;assertNotComplex([x,filter],"conv2d");var $dataFormat=tfjsCore.backend_util.convertConv2DDataFormat(dataFormat);var convInfo=tfjsCore.backend_util.computeConv2DInfo(x.shape,filter.shape,strides,dilations,pad,dimRoundingMode,false,$dataFormat);var filterHeight=convInfo.filterHeight;var filterWidth=convInfo.filterWidth;var dilationHeight=convInfo.dilationHeight;var dilationWidth=convInfo.dilationWidth;var padLeft=convInfo.padInfo.left;var padTop=convInfo.padInfo.top;var isChannelsLast=convInfo.dataFormat==="channelsLast";var y=new tfjsCore.TensorBuffer(convInfo.outShape,x.dtype);var xStrides=tfjsCore.util.computeStrides(x.shape);var filterStrides=tfjsCore.util.computeStrides(filter.shape);var xBatchStride=xStrides[0];var xRowStride=isChannelsLast?xStrides[1]:xStrides[2];var xColStride=isChannelsLast?xStrides[2]:1;var xChannelStride=isChannelsLast?1:xStrides[1];var yBatchStride=y.strides[0];var yRowStride=isChannelsLast?y.strides[1]:y.strides[2];var yColStride=isChannelsLast?y.strides[2]:1;var yChannelStride=isChannelsLast?1:y.strides[1];var xVals=backend.data.get(x.dataId).values;var wVals=backend.data.get(filter.dataId).values;var yVals=y.values;for(var b=0;b<convInfo.batchSize;++b){var xOffset1=b*xBatchStride;var yOffset1=b*yBatchStride;for(var yR=0;yR<convInfo.outHeight;++yR){var yOffset2=yOffset1+yR*yRowStride;var xRCorner=yR*convInfo.strideHeight-padTop;for(var wR=0;wR<filterHeight;++wR){var xR=xRCorner+wR*dilationHeight;if(xR<0||xR>=convInfo.inHeight){continue}var wOffset1=wR*filterStrides[0];var xOffset2=xOffset1+xR*xRowStride;for(var yC=0;yC<convInfo.outWidth;++yC){var yOffset3=yOffset2+yC*yColStride;var xCCorner=yC*convInfo.strideWidth-padLeft;for(var wC=0;wC<filterWidth;++wC){var xC=xCCorner+wC*dilationWidth;if(xC<0||xC>=convInfo.inWidth){continue}var wOffset2=wOffset1+wC*filterStrides[1];var xOffset3=xOffset2+xC*xColStride;var wOffset3=wOffset2;for(var d1=0;d1<convInfo.inChannels;++d1){var xVal=xVals[xOffset3+d1*xChannelStride];for(var d2=0;d2<convInfo.outChannels;++d2){yVals[yOffset3+d2*yChannelStride]+=xVal*wVals[wOffset3+d2]}wOffset3+=convInfo.outChannels}}}}}}return backend.makeTensorInfo(y.shape,y.dtype,yVals)}var conv2DConfig={kernelName:tfjsCore.Conv2D,backendName:"cpu",kernelFunc:conv2D};function conv2DBackpropFilter(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,dy=inputs.dy;var strides=attrs.strides,pad=attrs.pad,dataFormat=attrs.dataFormat,dimRoundingMode=attrs.dimRoundingMode,filterShape=attrs.filterShape;assertNotComplex([x,dy],"conv2dBackpropFilter");var $dataFormat=tfjsCore.backend_util.convertConv2DDataFormat(dataFormat);var convInfo=tfjsCore.backend_util.computeConv2DInfo(x.shape,filterShape,strides,1,pad,dimRoundingMode,false,$dataFormat);var strideHeight=convInfo.strideHeight,strideWidth=convInfo.strideWidth,filterHeight=convInfo.filterHeight,filterWidth=convInfo.filterWidth;var isChannelsLast=convInfo.dataFormat==="channelsLast";var dW=new tfjsCore.TensorBuffer(convInfo.filterShape,"float32");var leftPad=convInfo.padInfo.left;var topPad=convInfo.padInfo.top;var xVals=backend.data.get(x.dataId).values;var dyVals=backend.data.get(dy.dataId).values;var xBuf=new tfjsCore.TensorBuffer(x.shape,x.dtype,xVals);var dyBuf=new tfjsCore.TensorBuffer(dy.shape,dy.dtype,dyVals);for(var wR=0;wR<filterHeight;++wR){var yRMin=Math.max(0,Math.ceil((topPad-wR)/strideHeight));var yRMax=Math.min(convInfo.outHeight,(convInfo.inHeight+topPad-wR)/strideHeight);for(var wC=0;wC<filterWidth;++wC){var yCMin=Math.max(0,Math.ceil((leftPad-wC)/strideWidth));var yCMax=Math.min(convInfo.outWidth,(convInfo.inWidth+leftPad-wC)/strideWidth);for(var d1=0;d1<convInfo.inChannels;++d1){for(var d2=0;d2<convInfo.outChannels;++d2){var dotProd=0;for(var b=0;b<convInfo.batchSize;++b){for(var yR=yRMin;yR<yRMax;++yR){var xR=wR+yR*strideHeight-topPad;for(var yC=yCMin;yC<yCMax;++yC){var xC=wC+yC*strideWidth-leftPad;if(isChannelsLast){dotProd+=xBuf.get(b,xR,xC,d1)*dyBuf.get(b,yR,yC,d2)}else{dotProd+=xBuf.get(b,d1,xR,xC)*dyBuf.get(b,d2,yR,yC)}}}}dW.set(dotProd,wR,wC,d1,d2)}}}}return backend.makeTensorInfo(dW.shape,dW.dtype,dW.values)}var conv2DBackpropFilterConfig={kernelName:tfjsCore.Conv2DBackpropFilter,backendName:"cpu",kernelFunc:conv2DBackpropFilter};function conv2DBackpropInput(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var dy=inputs.dy,filter=inputs.filter;var inputShape=attrs.inputShape,strides=attrs.strides,pad=attrs.pad,dataFormat=attrs.dataFormat,dimRoundingMode=attrs.dimRoundingMode;assertNotComplex([dy,filter],"conv2dBackpropInput");var filterStrides=tfjsCore.util.computeStrides(filter.shape);var dyStrides=tfjsCore.util.computeStrides(dy.shape);var $dataFormat=tfjsCore.backend_util.convertConv2DDataFormat(dataFormat);var convInfo=tfjsCore.backend_util.computeConv2DInfo(inputShape,filter.shape,strides,1,pad,dimRoundingMode,false,$dataFormat);var dx=new tfjsCore.TensorBuffer(convInfo.inShape,"float32");var dxValues=dx.values;var dyValues=backend.data.get(dy.dataId).values;var fltValues=backend.data.get(filter.dataId).values;var _a=__read(filterStrides,3),fltS0=_a[0],fltS1=_a[1],fltS2=_a[2];var batchSize=convInfo.batchSize,filterHeight=convInfo.filterHeight,filterWidth=convInfo.filterWidth,inChannels=convInfo.inChannels,inHeight=convInfo.inHeight,inWidth=convInfo.inWidth,outChannels=convInfo.outChannels,outHeight=convInfo.outHeight,outWidth=convInfo.outWidth,strideHeight=convInfo.strideHeight,strideWidth=convInfo.strideWidth;$dataFormat=convInfo.dataFormat;var topPad=filterHeight-1-convInfo.padInfo.top;var leftPad=filterWidth-1-convInfo.padInfo.left;var isChannelsLast=$dataFormat==="channelsLast";var xBatchStride=dx.strides[0];var xRowStride=isChannelsLast?dx.strides[1]:dx.strides[2];var xColStride=isChannelsLast?dx.strides[2]:1;var xChannelStride=isChannelsLast?1:dx.strides[1];var yBatchStride=dyStrides[0];var yRowStride=isChannelsLast?dyStrides[1]:dyStrides[2];var yColStride=isChannelsLast?dyStrides[2]:1;var yChannelStride=isChannelsLast?1:dyStrides[1];for(var b=0;b<batchSize;++b){for(var d1=0;d1<inChannels;++d1){for(var xR=0;xR<inHeight;++xR){var xRCorner=xR-topPad;var xRMin=Math.max(0,Math.ceil(xRCorner/strideHeight));var yRMax=Math.min(outHeight,(filterHeight+xRCorner)/strideHeight);for(var xC=0;xC<inWidth;++xC){var xCCorner=xC-leftPad;var xCMin=Math.max(0,Math.ceil(xCCorner/strideWidth));var yCMax=Math.min(outWidth,(filterWidth+xCCorner)/strideWidth);var dotProd=0;for(var yR=xRMin;yR<yRMax;++yR){var wR=yR*strideHeight-xRCorner;for(var yC=xCMin;yC<yCMax;++yC){var wC=yC*strideWidth-xCCorner;var dyOffset=yBatchStride*b+yRowStride*yR+yColStride*yC;var fltOffset=fltS0*(filterHeight-1-wR)+fltS1*(filterWidth-1-wC)+fltS2*d1;for(var d2=0;d2<outChannels;++d2){var pixel=dyValues[dyOffset+yChannelStride*d2];var weight=fltValues[fltOffset+d2];dotProd+=pixel*weight}}}var dxOffset=xBatchStride*b+xRowStride*xR+xColStride*xC+xChannelStride*d1;dxValues[dxOffset]=dotProd}}}}return backend.makeTensorInfo(dx.shape,dx.dtype,dx.values)}var conv2DBackpropInputConfig={kernelName:tfjsCore.Conv2DBackpropInput,backendName:"cpu",kernelFunc:conv2DBackpropInput};function conv3D(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,filter=inputs.filter;var strides=attrs.strides,pad=attrs.pad,dilations=attrs.dilations;assertNotComplex([x,filter],"conv3d");var convInfo=tfjsCore.backend_util.computeConv3DInfo(x.shape,filter.shape,strides,dilations,pad);var filterDepth=convInfo.filterDepth,filterHeight=convInfo.filterHeight,filterWidth=convInfo.filterWidth,dilationDepth=convInfo.dilationDepth,dilationHeight=convInfo.dilationHeight,dilationWidth=convInfo.dilationWidth,padInfo=convInfo.padInfo;var padFront=padInfo.front;var padLeft=padInfo.left;var padTop=padInfo.top;var y=new tfjsCore.TensorBuffer(convInfo.outShape,x.dtype);var xVals=backend.data.get(x.dataId).values;var wVals=backend.data.get(filter.dataId).values;var yVals=y.values;var xStrides=tfjsCore.util.computeStrides(x.shape);var filterStrides=tfjsCore.util.computeStrides(filter.shape);for(var b=0;b<convInfo.batchSize;++b){var xOffset1=b*xStrides[0];var yOffset1=b*y.strides[0];for(var yF=0;yF<convInfo.outDepth;++yF){var yOffset2=yOffset1+yF*y.strides[1];var xFCorner=yF*convInfo.strideDepth-padFront;for(var wF=0;wF<filterDepth;++wF){var xF=xFCorner+wF*dilationDepth;if(xF<0||xF>=convInfo.inDepth){continue}var wOffset1=wF*filterStrides[0];var xOffset2=xOffset1+xF*xStrides[1];for(var yR=0;yR<convInfo.outHeight;++yR){var yOffset3=yOffset2+yR*y.strides[2];var xRCorner=yR*convInfo.strideHeight-padTop;for(var wR=0;wR<filterHeight;++wR){var xR=xRCorner+wR*dilationHeight;if(xR<0||xR>=convInfo.inHeight){continue}var wOffset2=wOffset1+wR*filterStrides[1];var xOffset3=xOffset2+xR*xStrides[2];for(var yC=0;yC<convInfo.outWidth;++yC){var yOffset4=yOffset3+yC*convInfo.outChannels;var xCCorner=yC*convInfo.strideWidth-padLeft;for(var wC=0;wC<filterWidth;++wC){var xC=xCCorner+wC*dilationWidth;if(xC<0||xC>=convInfo.inWidth){continue}var wOffset3=wOffset2+wC*filterStrides[2];var xOffset4=xOffset3+xC*convInfo.inChannels;var wOffset4=wOffset3;for(var d1=0;d1<convInfo.inChannels;++d1){var xVal=xVals[xOffset4+d1];for(var d2=0;d2<convInfo.outChannels;++d2){yVals[yOffset4+d2]+=xVal*wVals[wOffset4+d2]}wOffset4+=convInfo.outChannels}}}}}}}}return backend.makeTensorInfo(y.shape,y.dtype,y.values)}var conv3DConfig={kernelName:tfjsCore.Conv3D,backendName:"cpu",kernelFunc:conv3D};function conv3DBackpropFilterV2(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,dy=inputs.dy;var strides=attrs.strides,pad=attrs.pad,filterShape=attrs.filterShape;assertNotComplex([x,dy],"conv3dBackpropFilterV2");var xStrides=tfjsCore.util.computeStrides(x.shape);var dyStrides=tfjsCore.util.computeStrides(dy.shape);var convInfo=tfjsCore.backend_util.computeConv3DInfo(x.shape,filterShape,strides,1,pad);var strideDepth=convInfo.strideDepth;var strideHeight=convInfo.strideHeight;var strideWidth=convInfo.strideWidth;var filterDepth=convInfo.filterDepth;var filterHeight=convInfo.filterHeight;var filterWidth=convInfo.filterWidth;var dw=new tfjsCore.TensorBuffer(convInfo.filterShape,"float32");var dwValues=dw.values;var _a=__read(dw.strides,4),dwS0=_a[0],dwS1=_a[1],dwS2=_a[2],dwS3=_a[3];var dyValues=backend.data.get(dy.dataId).values;var _b=__read(dyStrides,4),dyS0=_b[0],dyS1=_b[1],dyS2=_b[2],dyS3=_b[3];var xValues=backend.data.get(x.dataId).values;var _c=__read(xStrides,4),xS0=_c[0],xS1=_c[1],xS2=_c[2],xS3=_c[3];var frontPad=convInfo.padInfo.front;var leftPad=convInfo.padInfo.left;var topPad=convInfo.padInfo.top;for(var wF=0;wF<filterDepth;++wF){var yFMin=Math.max(0,Math.ceil((frontPad-wF)/strideDepth));var yFMax=Math.min(convInfo.outDepth,(convInfo.inDepth+frontPad-wF)/strideDepth);var wOffset1=wF*dwS0;for(var wR=0;wR<filterHeight;++wR){var yRMin=Math.max(0,Math.ceil((topPad-wR)/strideHeight));var yRMax=Math.min(convInfo.outHeight,(convInfo.inHeight+topPad-wR)/strideHeight);var wOffset2=wR*dwS1+wOffset1;for(var wC=0;wC<filterWidth;++wC){var yCMin=Math.max(0,Math.ceil((leftPad-wC)/strideWidth));var yCMax=Math.min(convInfo.outWidth,(convInfo.inWidth+leftPad-wC)/strideWidth);var wOffset3=wC*dwS2+wOffset2;for(var d1=0;d1<convInfo.inChannels;++d1){var wOffset4=d1*dwS3+wOffset3;for(var d2=0;d2<convInfo.outChannels;++d2){var dotProd=0;for(var b=0;b<convInfo.batchSize;++b){var xOffset1=b*xS0;var yOffset1=b*dyS0;for(var yF=yFMin;yF<yFMax;++yF){var xF=wF+yF*strideDepth-frontPad;var xOffset2=xF*xS1+xOffset1;var yOffset2=yF*dyS1+yOffset1;for(var yR=yRMin;yR<yRMax;++yR){var xR=wR+yR*strideHeight-topPad;var xOffset3=xR*xS2+xOffset2;var yOffset3=yR*dyS2+yOffset2;for(var yC=yCMin;yC<yCMax;++yC){var xC=wC+yC*strideWidth-leftPad;var xOffset4=xC*xS3+xOffset3;var yOffset4=yC*dyS3+yOffset3;dotProd+=xValues[xOffset4+d1]*dyValues[yOffset4+d2]}}}}dwValues[wOffset4+d2]=dotProd}}}}}return backend.makeTensorInfo(dw.shape,dw.dtype,dw.values)}var conv3DBackpropFilterV2Config={kernelName:tfjsCore.Conv3DBackpropFilterV2,backendName:"cpu",kernelFunc:conv3DBackpropFilterV2};function conv3DBackpropInputV2(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var dy=inputs.dy,filter=inputs.filter;var pad=attrs.pad,strides=attrs.strides,inputShape=attrs.inputShape;assertNotComplex([dy],"conv3dBackpropInputV2");var dyStrides=tfjsCore.util.computeStrides(dy.shape);var filterStrides=tfjsCore.util.computeStrides(filter.shape);var convInfo=tfjsCore.backend_util.computeConv3DInfo(inputShape,filter.shape,strides,1,pad);var dx=new tfjsCore.TensorBuffer(convInfo.inShape,"float32");var dxValues=dx.values;var _a=__read(dx.strides,4),dxS0=_a[0],dxS1=_a[1],dxS2=_a[2],dxS3=_a[3];var dyValues=backend.data.get(dy.dataId).values;var _b=__read(dyStrides,4),dyS0=_b[0],dyS1=_b[1],dyS2=_b[2],dyS3=_b[3];var fltValues=backend.data.get(filter.dataId).values;var _c=__read(filterStrides,4),fltS0=_c[0],fltS1=_c[1],fltS2=_c[2],fltS3=_c[3];var batchSize=convInfo.batchSize,filterDepth=convInfo.filterDepth,filterHeight=convInfo.filterHeight,filterWidth=convInfo.filterWidth,inChannels=convInfo.inChannels,inDepth=convInfo.inDepth,inHeight=convInfo.inHeight,inWidth=convInfo.inWidth,outChannels=convInfo.outChannels,outDepth=convInfo.outDepth,outHeight=convInfo.outHeight,outWidth=convInfo.outWidth,strideDepth=convInfo.strideDepth,strideHeight=convInfo.strideHeight,strideWidth=convInfo.strideWidth;var frontPad=filterDepth-1-convInfo.padInfo.front;var topPad=filterHeight-1-convInfo.padInfo.top;var leftPad=filterWidth-1-convInfo.padInfo.left;for(var b=0;b<batchSize;++b){for(var d1=0;d1<inChannels;++d1){for(var xF=0;xF<inDepth;++xF){var xFCorner=xF-frontPad;var xFMin=Math.max(0,Math.ceil(xFCorner/strideDepth));var yFMax=Math.min(outDepth,(filterDepth+xFCorner)/strideDepth);for(var xR=0;xR<inHeight;++xR){var xRCorner=xR-topPad;var xRMin=Math.max(0,Math.ceil(xRCorner/strideHeight));var yRMax=Math.min(outHeight,(filterHeight+xRCorner)/strideHeight);for(var xC=0;xC<inWidth;++xC){var xCCorner=xC-leftPad;var xCMin=Math.max(0,Math.ceil(xCCorner/strideWidth));var yCMax=Math.min(outWidth,(filterWidth+xCCorner)/strideWidth);var dotProd=0;for(var yF=xFMin;yF<yFMax;++yF){var wF=yF*strideDepth-xFCorner;for(var yR=xRMin;yR<yRMax;++yR){var wR=yR*strideHeight-xRCorner;for(var yC=xCMin;yC<yCMax;++yC){var wC=yC*strideWidth-xCCorner;var dyOffset=dyS0*b+dyS1*yF+dyS2*yR+dyS3*yC;var fltOffset=fltS0*(filterDepth-1-wF)+fltS1*(filterHeight-1-wR)+fltS2*(filterWidth-1-wC)+fltS3*d1;for(var d2=0;d2<outChannels;++d2){var pixel=dyValues[dyOffset+d2];var weight=fltValues[fltOffset+d2];dotProd+=pixel*weight}}}}dxValues[dxS0*b+dxS1*xF+dxS2*xR+dxS3*xC+d1]=dotProd}}}}}return backend.makeTensorInfo(dx.shape,dx.dtype,dx.values)}var conv3DBackpropInputV2Config={kernelName:tfjsCore.Conv3DBackpropInputV2,backendName:"cpu",kernelFunc:conv3DBackpropInputV2};var cos=unaryKernelFunc(tfjsCore.Cos,function(xi){return Math.cos(xi)});var cosConfig={kernelName:tfjsCore.Cos,backendName:"cpu",kernelFunc:cos};var cosh=unaryKernelFunc(tfjsCore.Cosh,function(xi){return Math.cosh(xi)});var coshConfig={kernelName:tfjsCore.Cosh,backendName:"cpu",kernelFunc:cosh};function cropAndResize(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var image=inputs.image,boxes=inputs.boxes,boxInd=inputs.boxInd;var cropSize=attrs.cropSize,method=attrs.method,extrapolationValue=attrs.extrapolationValue;var _a=__read(image.shape,4),batch=_a[0],imageHeight=_a[1],imageWidth=_a[2],numChannels=_a[3];var numBoxes=boxes.shape[0];var _b=__read(cropSize,2),cropHeight=_b[0],cropWidth=_b[1];var output=tfjsCore.buffer([numBoxes,cropHeight,cropWidth,numChannels],"float32");var boxVals=backend.data.get(boxes.dataId).values;var boxIndVals=backend.data.get(boxInd.dataId).values;var imageVals=backend.data.get(image.dataId).values;var inStride=tfjsCore.util.computeStrides(image.shape);var outStride=tfjsCore.util.computeStrides(output.shape);for(var b=0;b<numBoxes;b++){var startInd=b*4;var y1=boxVals[startInd];var x1=boxVals[startInd+1];var y2=boxVals[startInd+2];var x2=boxVals[startInd+3];var bInd=boxIndVals[b];if(bInd>=batch){continue}var heightScale=cropHeight>1?(y2-y1)*(imageHeight-1)/(cropHeight-1):0;var widthScale=cropWidth>1?(x2-x1)*(imageWidth-1)/(cropWidth-1):0;for(var y=0;y<cropHeight;y++){var yInd=cropHeight>1?y1*(imageHeight-1)+y*heightScale:.5*(y1+y2)*(imageHeight-1);if(yInd<0||yInd>imageHeight-1){for(var x=0;x<cropWidth;x++){for(var c=0;c<numChannels;c++){var ind=c+x*outStride[2]+y*outStride[1]+b*outStride[0];output.values[ind]=extrapolationValue}}continue}if(method==="bilinear"){var topInd=Math.floor(yInd);var bottomInd=Math.ceil(yInd);var yLerp=yInd-topInd;for(var x=0;x<cropWidth;x++){var xInd=cropWidth>1?x1*(imageWidth-1)+x*widthScale:.5*(x1+x2)*(imageWidth-1);if(xInd<0||xInd>imageWidth-1){for(var c=0;c<numChannels;c++){var ind=c+x*outStride[2]+y*outStride[1]+b*outStride[0];output.values[ind]=extrapolationValue}continue}var leftInd=Math.floor(xInd);var rightInd=Math.ceil(xInd);var xLerp=xInd-leftInd;for(var c=0;c<numChannels;c++){var ind=c+leftInd*inStride[2]+topInd*inStride[1]+bInd*inStride[0];var topLeft=imageVals[ind];ind=c+rightInd*inStride[2]+topInd*inStride[1]+bInd*inStride[0];var topRight=imageVals[ind];ind=c+leftInd*inStride[2]+bottomInd*inStride[1]+bInd*inStride[0];var bottomLeft=imageVals[ind];ind=c+rightInd*inStride[2]+bottomInd*inStride[1]+bInd*inStride[0];var bottomRight=imageVals[ind];var top=topLeft+(topRight-topLeft)*xLerp;var bottom=bottomLeft+(bottomRight-bottomLeft)*xLerp;ind=c+x*outStride[2]+y*outStride[1]+b*outStride[0];output.values[ind]=top+(bottom-top)*yLerp}}}else{for(var x=0;x<cropWidth;++x){var xInd=cropWidth>1?x1*(imageWidth-1)+x*widthScale:.5*(x1+x2)*(imageWidth-1);if(xInd<0||xInd>imageWidth-1){for(var c=0;c<numChannels;c++){var ind=c+x*outStride[2]+y*outStride[1]+b*outStride[0];output.values[ind]=extrapolationValue}continue}var closestX=Math.round(xInd);var closestY=Math.round(yInd);for(var c=0;c<numChannels;c++){var inInd=c+closestX*inStride[2]+closestY*inStride[1]+bInd*inStride[0];var outInd=c+x*outStride[2]+y*outStride[1]+b*outStride[0];output.values[outInd]=imageVals[inInd]}}}}}return backend.makeTensorInfo(output.shape,output.dtype,output.values)}var cropAndResizeConfig={kernelName:tfjsCore.CropAndResize,backendName:"cpu",kernelFunc:cropAndResize};function cumsum(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var axis=attrs.axis,exclusive=attrs.exclusive,reverse=attrs.reverse;assertNotComplex(x,"cumsum");var permutation=tfjsCore.backend_util.getAxesPermutation([axis],x.shape.length);var $x=x;if(permutation!=null){$x=transpose({inputs:{x:x},backend:backend,attrs:{perm:permutation}})}var permutedAxis=tfjsCore.backend_util.getInnerMostAxes(1,x.shape.length)[0];if(permutedAxis!==$x.shape.length-1){throw new Error("backend.cumsum in CPU expects an inner-most "+("axis="+($x.shape.length-1)+" but got axis="+permutedAxis))}var resultDtype=tfjsCore.upcastType($x.dtype,"int32");var vals=tfjsCore.util.makeZerosTypedArray(tfjsCore.util.sizeFromShape($x.shape),resultDtype);var aVals=backend.data.get($x.dataId).values;var finalDim=$x.shape[$x.shape.length-1];var indexAdjuster=reverse?function(i,j){return i+finalDim-j-1}:function(i,j){return i+j};for(var i=0;i<aVals.length;i+=finalDim){for(var j=0;j<finalDim;j++){var idx=indexAdjuster(i,j);if(j===0){vals[idx]=exclusive?0:aVals[idx]}else{var prevIdx=indexAdjuster(i,j-1);vals[idx]=exclusive?aVals[prevIdx]+vals[prevIdx]:aVals[idx]+vals[prevIdx]}}}var result=backend.makeTensorInfo($x.shape,resultDtype,vals);if(permutation!=null){var reversePermutation=tfjsCore.backend_util.getUndoAxesPermutation(permutation);var reverseTransposedResult=transpose({inputs:{x:result},backend:backend,attrs:{perm:reversePermutation}});backend.disposeIntermediateTensorInfo(result);backend.disposeIntermediateTensorInfo($x);return reverseTransposedResult}return result}var cumsumConfig={kernelName:tfjsCore.Cumsum,backendName:"cpu",kernelFunc:cumsum};function denseBincount(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,weights=inputs.weights;var size=attrs.size,binaryOutput=attrs.binaryOutput;if(x.shape.length===1){var xVals=backend.data.get(x.dataId).values;var weightsVals=backend.data.get(weights.dataId).values;var outVals=bincountImpl(xVals,weightsVals,weights.dtype,weights.shape,size);return backend.makeTensorInfo([size],weights.dtype,outVals)}else if(x.shape.length===2){var xBuf=backend.bufferSync(x);var weightsBuf=backend.bufferSync(weights);var outBuf=bincountReduceImpl(xBuf,weightsBuf,size,binaryOutput);return backend.makeTensorInfo(outBuf.shape,weights.dtype,outBuf.values)}throw new Error("Error in denseBincount: input must be at most rank 2, but got rank"+(x.shape.length+"."))}var denseBincountConfig={kernelName:tfjsCore.DenseBincount,backendName:"cpu",kernelFunc:denseBincount};function depthToSpace(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var blockSize=attrs.blockSize,dataFormat=attrs.dataFormat;tfjsCore.util.assert(dataFormat==="NHWC",function(){return"Only NHWC dataFormat supported on CPU for depthToSpace. Got "+dataFormat});var batchSize=x.shape[0];var inputHeight=x.shape[1];var inputWidth=x.shape[2];var inputDepth=x.shape[3];var outputHeight=inputHeight*blockSize;var outputWidth=inputWidth*blockSize;var outputDepth=inputDepth/(blockSize*blockSize);var xValues=backend.data.get(x.dataId).values;var result=new Float32Array(batchSize*outputHeight*outputWidth*outputDepth);var outputIdx=0;for(var b=0;b<batchSize;++b){for(var h=0;h<outputHeight;++h){var inH=Math.floor(h/blockSize);var offsetH=h%blockSize;for(var w=0;w<outputWidth;++w){var inW=Math.floor(w/blockSize);var offsetW=w%blockSize;var offsetD=(offsetH*blockSize+offsetW)*outputDepth;for(var d=0;d<outputDepth;++d){var inD=d+offsetD;var inputIdx=inD+inputDepth*(inW+inputWidth*(inH+inputHeight*b));result[outputIdx++]=xValues[inputIdx]}}}}return backend.makeTensorInfo([batchSize,outputHeight,outputWidth,outputDepth],x.dtype,result)}var depthToSpaceConfig={kernelName:tfjsCore.DepthToSpace,backendName:"cpu",kernelFunc:depthToSpace};function depthwiseConv2dNative(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,filter=inputs.filter;var strides=attrs.strides,pad=attrs.pad,dilations=attrs.dilations,dimRoundingMode=attrs.dimRoundingMode;assertNotComplex([x,filter],"depthwiseConv2DNative");var xStrides=tfjsCore.util.computeStrides(x.shape);var filterStrides=tfjsCore.util.computeStrides(filter.shape);var $dilations=dilations;if($dilations==null){$dilations=[1,1]}tfjsCore.util.assert(tfjsCore.backend_util.eitherStridesOrDilationsAreOne(strides,$dilations),function(){return"Error in depthwiseConv2d: Either strides or dilations must be "+("1. Got strides "+strides+" and dilations '"+$dilations+"'")});var convInfo=tfjsCore.backend_util.computeConv2DInfo(x.shape,filter.shape,strides,$dilations,pad,dimRoundingMode,true);var filterHeight=convInfo.filterHeight,filterWidth=convInfo.filterWidth,dilationHeight=convInfo.dilationHeight,dilationWidth=convInfo.dilationWidth,padInfo=convInfo.padInfo;var padLeft=padInfo.left;var padTop=padInfo.top;var chMul=convInfo.outChannels/convInfo.inChannels;var y=new tfjsCore.TensorBuffer(convInfo.outShape,x.dtype);var xVals=backend.data.get(x.dataId).values;var wVals=backend.data.get(filter.dataId).values;var yVals=y.values;for(var b=0;b<convInfo.batchSize;++b){var xOffset1=b*xStrides[0];var yOffset1=b*y.strides[0];for(var yR=0;yR<convInfo.outHeight;++yR){var yOffset2=yOffset1+yR*y.strides[1];var xRCorner=yR*convInfo.strideHeight-padTop;for(var wR=0;wR<filterHeight;++wR){var xR=xRCorner+wR*dilationHeight;if(xR<0||xR>=convInfo.inHeight){continue}var wOffset1=wR*filterStrides[0];var xOffset2=xOffset1+xR*xStrides[1];for(var yC=0;yC<convInfo.outWidth;++yC){var yOffset3=yOffset2+yC*y.strides[2];var xCCorner=yC*convInfo.strideWidth-padLeft;for(var wC=0;wC<filterWidth;++wC){var xC=xCCorner+wC*dilationWidth;if(xC<0||xC>=convInfo.inWidth){continue}var wOffset2=wOffset1+wC*filterStrides[1];var xOffset3=xOffset2+xC*convInfo.inChannels;var yOffset4=yOffset3;var wOffset3=wOffset2;for(var d1=0;d1<convInfo.inChannels;++d1){var xVal=xVals[xOffset3+d1];for(var q=0;q<chMul;++q){yVals[yOffset4+q]+=xVal*wVals[wOffset3+q]}yOffset4+=chMul;wOffset3+=chMul}}}}}}return backend.makeTensorInfo(y.shape,y.dtype,y.values)}var depthwiseConv2dNativeConfig={kernelName:tfjsCore.DepthwiseConv2dNative,backendName:"cpu",kernelFunc:depthwiseConv2dNative};function depthwiseConv2dNativeBackpropFilter(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,dy=inputs.dy;var strides=attrs.strides,dilations=attrs.dilations,pad=attrs.pad,dimRoundingMode=attrs.dimRoundingMode,filterShape=attrs.filterShape;assertNotComplex([x,dy],"depthwiseConv2dNativeBackpropFilter");var convInfo=tfjsCore.backend_util.computeConv2DInfo(x.shape,filterShape,strides,dilations,pad,dimRoundingMode,true);var strideHeight=convInfo.strideHeight,strideWidth=convInfo.strideWidth,filterHeight=convInfo.filterHeight,filterWidth=convInfo.filterWidth;var dW=new tfjsCore.TensorBuffer(convInfo.filterShape,"float32");var leftPad=convInfo.padInfo.left;var topPad=convInfo.padInfo.top;var chMul=convInfo.outChannels/convInfo.inChannels;var xVals=backend.data.get(x.dataId).values;var xBuf=new tfjsCore.TensorBuffer(x.shape,x.dtype,xVals);var dyVals=backend.data.get(dy.dataId).values;var dyBuf=new tfjsCore.TensorBuffer(dy.shape,dy.dtype,dyVals);for(var wR=0;wR<filterHeight;++wR){var yRMin=Math.max(0,Math.ceil((topPad-wR)/strideHeight));var yRMax=Math.min(convInfo.outHeight,(convInfo.inHeight+topPad-wR)/strideHeight);for(var wC=0;wC<filterWidth;++wC){var yCMin=Math.max(0,Math.ceil((leftPad-wC)/strideWidth));var yCMax=Math.min(convInfo.outWidth,(convInfo.inWidth+leftPad-wC)/strideWidth);for(var d2=0;d2<convInfo.outChannels;++d2){var d1=Math.trunc(d2/chMul);var dm=d2%chMul;var dotProd=0;for(var b=0;b<convInfo.batchSize;++b){for(var yR=yRMin;yR<yRMax;++yR){var xR=wR+yR*strideHeight-topPad;for(var yC=yCMin;yC<yCMax;++yC){var xC=wC+yC*strideWidth-leftPad;dotProd+=xBuf.get(b,xR,xC,d1)*dyBuf.get(b,yR,yC,d2)}}}dW.set(dotProd,wR,wC,d1,dm)}}}return backend.makeTensorInfo(dW.shape,dW.dtype,dW.values)}var depthwiseConv2dNativeBackpropFilterConfig={kernelName:tfjsCore.DepthwiseConv2dNativeBackpropFilter,backendName:"cpu",kernelFunc:depthwiseConv2dNativeBackpropFilter};function depthwiseConv2dNativeBackpropInput(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var dy=inputs.dy,filter=inputs.filter;var strides=attrs.strides,dilations=attrs.dilations,pad=attrs.pad,dimRoundingMode=attrs.dimRoundingMode,inputShape=attrs.inputShape;assertNotComplex([dy,filter],"depthwiseConv2DNativeBackpropInput");var dyStrides=tfjsCore.util.computeStrides(dy.shape);var filterStrides=tfjsCore.util.computeStrides(filter.shape);var convInfo=tfjsCore.backend_util.computeConv2DInfo(inputShape,filter.shape,strides,dilations,pad,dimRoundingMode,true);var dx=new tfjsCore.TensorBuffer(convInfo.inShape,"float32");var dxValues=dx.values;var _a=__read(dx.strides,3),dxS0=_a[0],dxS1=_a[1],dxS2=_a[2];var dyValues=backend.data.get(dy.dataId).values;var _b=__read(dyStrides,3),dyS0=_b[0],dyS1=_b[1],dyS2=_b[2];var fltValues=backend.data.get(filter.dataId).values;var _c=__read(filterStrides,3),fltS0=_c[0],fltS1=_c[1],fltS2=_c[2];var batchSize=convInfo.batchSize,filterHeight=convInfo.filterHeight,filterWidth=convInfo.filterWidth,inChannels=convInfo.inChannels,inHeight=convInfo.inHeight,inWidth=convInfo.inWidth,outChannels=convInfo.outChannels,outHeight=convInfo.outHeight,outWidth=convInfo.outWidth,strideHeight=convInfo.strideHeight,strideWidth=convInfo.strideWidth;var topPad=filterHeight-1-convInfo.padInfo.top;var leftPad=filterWidth-1-convInfo.padInfo.left;var chMul=outChannels/inChannels;for(var b=0;b<batchSize;++b){for(var d1=0;d1<inChannels;++d1){for(var xR=0;xR<inHeight;++xR){var xRCorner=xR-topPad;var xRMin=Math.max(0,Math.ceil(xRCorner/strideHeight));var yRMax=Math.min(outHeight,(filterHeight+xRCorner)/strideHeight);for(var xC=0;xC<inWidth;++xC){var xCCorner=xC-leftPad;var xCMin=Math.max(0,Math.ceil(xCCorner/strideWidth));var yCMax=Math.min(outWidth,(filterWidth+xCCorner)/strideWidth);var dotProd=0;for(var yR=xRMin;yR<yRMax;++yR){var wR=yR*strideHeight-xRCorner;for(var yC=xCMin;yC<yCMax;++yC){var wC=yC*strideWidth-xCCorner;var dyOffset=dyS0*b+dyS1*yR+dyS2*yC;var fltOffset=fltS0*(filterHeight-1-wR)+fltS1*(filterWidth-1-wC)+fltS2*d1;for(var dm=0;dm<chMul;++dm){var d2=d1*chMul+dm;var pixel=dyValues[dyOffset+d2];var weight=fltValues[fltOffset+dm];dotProd+=pixel*weight}}}dxValues[dxS0*b+dxS1*xR+dxS2*xC+d1]=dotProd}}}}return backend.makeTensorInfo(dx.shape,dx.dtype,dx.values)}var depthwiseConv2dNativeBackpropInputConfig={kernelName:tfjsCore.DepthwiseConv2dNativeBackpropInput,backendName:"cpu",kernelFunc:depthwiseConv2dNativeBackpropInput};function diag(args){var inputs=args.inputs,backend=args.backend;var x=inputs.x;var xSize=tfjsCore.util.sizeFromShape(x.shape);var xVals=backend.data.get(x.dataId).values;var outBuf=tfjsCore.buffer([xSize,xSize],x.dtype);var vals=outBuf.values;for(var i=0;i<xVals.length;i++){vals[i*xSize+i]=xVals[i]}var outShape=__spread(x.shape,x.shape);return backend.makeTensorInfo(outShape,outBuf.dtype,outBuf.values)}var diagConfig={kernelName:tfjsCore.Diag,backendName:"cpu",kernelFunc:diag};var dilation2dConfig={kernelName:tfjsCore.Dilation2D,backendName:"cpu",kernelFunc:function(_a){var inputs=_a.inputs,backend=_a.backend,attrs=_a.attrs;var x=inputs.x,filter=inputs.filter;var strides=attrs.strides,pad=attrs.pad,dilations=attrs.dilations;var cpuBackend=backend;var xVals=cpuBackend.data.get(x.dataId).values;var xRank=x.shape.length;var filterVals=cpuBackend.data.get(filter.dataId).values;var filterRank=filter.shape.length;var _b=tfjsCore.backend_util.computeDilation2DInfo(x.shape,filter.shape,strides,pad,"NHWC",dilations),batchSize=_b.batchSize,inHeight=_b.inHeight,inWidth=_b.inWidth,inChannels=_b.inChannels,outHeight=_b.outHeight,outWidth=_b.outWidth,padInfo=_b.padInfo,strideHeight=_b.strideHeight,strideWidth=_b.strideWidth,filterHeight=_b.filterHeight,filterWidth=_b.filterWidth,dilationHeight=_b.dilationHeight,dilationWidth=_b.dilationWidth,outShape=_b.outShape;var outSize=tfjsCore.util.sizeFromShape(outShape);var outRank=outShape.length;var outputVals=tfjsCore.util.getArrayFromDType(x.dtype,outSize);for(var b=0;b<batchSize;++b){for(var hOut=0;hOut<outHeight;++hOut){var hBeg=hOut*strideHeight-padInfo.top;for(var wOut=0;wOut<outWidth;++wOut){var wBeg=wOut*strideWidth-padInfo.left;for(var d=0;d<inChannels;++d){var curVal=Number.MIN_SAFE_INTEGER;for(var h=0;h<filterHeight;++h){var hIn=hBeg+h*dilationHeight;if(hIn>=0&&hIn<inHeight){for(var w=0;w<filterWidth;++w){var wIn=wBeg+w*dilationWidth;if(wIn>=0&&wIn<inWidth){var xIndex=tfjsCore.util.locToIndex([b,hIn,wIn,d],xRank,tfjsCore.util.computeStrides(x.shape));var filterIndex=tfjsCore.util.locToIndex([h,w,d],filterRank,tfjsCore.util.computeStrides(filter.shape));var val=xVals[xIndex]+filterVals[filterIndex];if(val>curVal){curVal=val}}}}}var outputIndex=tfjsCore.util.locToIndex([b,hOut,wOut,d],outRank,tfjsCore.util.computeStrides(outShape));outputVals[outputIndex]=curVal}}}}var dataId=cpuBackend.write(tfjsCore.util.toTypedArray(outputVals,x.dtype),outShape,x.dtype);return{dataId:dataId,shape:outShape,dtype:x.dtype}}};var dilation2dBackpropFilterConfig={kernelName:tfjsCore.Dilation2DBackpropFilter,backendName:"cpu",kernelFunc:function(_a){var inputs=_a.inputs,backend=_a.backend,attrs=_a.attrs;var x=inputs.x,filter=inputs.filter,dy=inputs.dy;var strides=attrs.strides,pad=attrs.pad,dilations=attrs.dilations;var cpuBackend=backend;var $x=tfjsCore.util.toNestedArray(x.shape,cpuBackend.data.get(x.dataId).values);var $filter=tfjsCore.util.toNestedArray(filter.shape,cpuBackend.data.get(filter.dataId).values);var _b=tfjsCore.backend_util.computeDilation2DInfo(x.shape,filter.shape,strides,pad,"NHWC",dilations),batchSize=_b.batchSize,inHeight=_b.inHeight,inWidth=_b.inWidth,inChannels=_b.inChannels,outHeight=_b.outHeight,outWidth=_b.outWidth,padInfo=_b.padInfo,strideHeight=_b.strideHeight,strideWidth=_b.strideWidth,filterHeight=_b.filterHeight,filterWidth=_b.filterWidth,dilationHeight=_b.dilationHeight,dilationWidth=_b.dilationWidth,outShape=_b.outShape;tfjsCore.util.assert(dy.rank===outShape.length,function(){return"Error in "+tfjsCore.Dilation2DBackpropFilter+", dy "+("must have the same rank as output "+outShape.length+", but got ")+(""+dy.rank)});var $dy=tfjsCore.util.toNestedArray(outShape,cpuBackend.data.get(dy.dataId).values);var gradients=tfjsCore.util.makeZerosNestedTypedArray(filter.shape,filter.dtype);for(var b=0;b<batchSize;++b){for(var hOut=0;hOut<outHeight;++hOut){var hBeg=hOut*strideHeight-padInfo.top;for(var wOut=0;wOut<outWidth;++wOut){var wBeg=wOut*strideWidth-padInfo.left;for(var d=0;d<inChannels;++d){var curVal=Number.MIN_SAFE_INTEGER;var hMax=0;var wMax=0;for(var h=0;h<filterHeight;++h){var hIn=hBeg+h*dilationHeight;if(hIn>=0&&hIn<inHeight){for(var w=0;w<filterWidth;++w){var wIn=wBeg+w*dilationWidth;if(wIn>=0&&wIn<inWidth){var val=$x[b][hIn][wIn][d]+$filter[h][w][d];if(val>curVal){curVal=val;hMax=h;wMax=w}}}}}gradients[hMax][wMax][d]+=$dy[b][hOut][wOut][d]}}}}var dataId=cpuBackend.write(tfjsCore.util.toTypedArray(gradients,x.dtype),filter.shape,filter.dtype);return{dataId:dataId,shape:filter.shape,dtype:filter.dtype}}};var dilation2dBackpropInputConfig={kernelName:tfjsCore.Dilation2DBackpropInput,backendName:"cpu",kernelFunc:function(_a){var inputs=_a.inputs,backend=_a.backend,attrs=_a.attrs;var x=inputs.x,filter=inputs.filter,dy=inputs.dy;var strides=attrs.strides,pad=attrs.pad,dilations=attrs.dilations;var cpuBackend=backend;var $x=tfjsCore.util.toNestedArray(x.shape,cpuBackend.data.get(x.dataId).values);var $filter=tfjsCore.util.toNestedArray(filter.shape,cpuBackend.data.get(filter.dataId).values);var _b=tfjsCore.backend_util.computeDilation2DInfo(x.shape,filter.shape,strides,pad,"NHWC",dilations),batchSize=_b.batchSize,inHeight=_b.inHeight,inWidth=_b.inWidth,inChannels=_b.inChannels,outHeight=_b.outHeight,outWidth=_b.outWidth,padInfo=_b.padInfo,strideHeight=_b.strideHeight,strideWidth=_b.strideWidth,filterHeight=_b.filterHeight,filterWidth=_b.filterWidth,dilationHeight=_b.dilationHeight,dilationWidth=_b.dilationWidth,outShape=_b.outShape;tfjsCore.util.assert(dy.rank===outShape.length,function(){return"Error in "+tfjsCore.Dilation2DBackpropInput+", dy "+("must have the same rank as output "+outShape.length+", but got ")+(""+dy.rank)});var $dy=tfjsCore.util.toNestedArray(outShape,cpuBackend.data.get(dy.dataId).values);var gradients=tfjsCore.util.makeZerosNestedTypedArray(x.shape,x.dtype);for(var b=0;b<batchSize;++b){for(var hOut=0;hOut<outHeight;++hOut){var hBeg=hOut*strideHeight-padInfo.top;for(var wOut=0;wOut<outWidth;++wOut){var wBeg=wOut*strideWidth-padInfo.left;for(var d=0;d<inChannels;++d){var curVal=Number.MIN_SAFE_INTEGER;var hInMax=hBeg<0?0:hBeg;var wInMax=wBeg<0?0:wBeg;for(var h=0;h<filterHeight;++h){var hIn=hBeg+h*dilationHeight;if(hIn>=0&&hIn<inHeight){for(var w=0;w<filterWidth;++w){var wIn=wBeg+w*dilationWidth;if(wIn>=0&&wIn<inWidth){var val=$x[b][hIn][wIn][d]+$filter[h][w][d];if(val>curVal){curVal=val;hInMax=hIn;wInMax=wIn}}}}}gradients[b][hInMax][wInMax][d]+=$dy[b][hOut][wOut][d]}}}}var dataId=cpuBackend.write(tfjsCore.util.toTypedArray(gradients,x.dtype),x.shape,x.dtype);return{dataId:dataId,shape:x.shape,dtype:x.dtype}}};function sum(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var axis=attrs.axis,keepDims=attrs.keepDims;assertNotComplex(x,"sum");var $x;if(x.dtype==="bool"){$x=cast({inputs:{x:x},backend:backend,attrs:{dtype:"int32"}})}else{$x=identity({inputs:{x:x},backend:backend})}var xRank=$x.shape.length;var axes=tfjsCore.util.parseAxisParam(axis,$x.shape);var permutation=tfjsCore.backend_util.getAxesPermutation(axes,xRank);var reductionAxes=axes;var permutedX=$x;if(permutation!=null){permutedX=transpose({inputs:{x:$x},backend:backend,attrs:{perm:permutation}});reductionAxes=tfjsCore.backend_util.getInnerMostAxes(reductionAxes.length,xRank)}tfjsCore.backend_util.assertAxesAreInnerMostDims("sum",reductionAxes,permutedX.shape.length);var _a=__read(tfjsCore.backend_util.computeOutAndReduceShapes(permutedX.shape,reductionAxes),2),outShape=_a[0],reduceShape=_a[1];var resultDtype=tfjsCore.backend_util.upcastType(permutedX.dtype,"int32");var result=zeros(backend,outShape,resultDtype);var reduceSize=tfjsCore.util.sizeFromShape(reduceShape);var vals=backend.data.get(result.dataId).values;var aVals=backend.data.get(permutedX.dataId).values;for(var i=0;i<vals.length;++i){var offset=i*reduceSize;var sum_1=0;for(var j=0;j<reduceSize;++j){sum_1+=aVals[offset+j]}vals[i]=sum_1}if(keepDims){var newShape=tfjsCore.backend_util.expandShapeToKeepDim(result.shape,axes);var oldResult=result;result=reshape({inputs:{x:result},backend:backend,attrs:{shape:newShape}});backend.disposeIntermediateTensorInfo(oldResult)}backend.disposeIntermediateTensorInfo($x);if(permutation!=null){backend.disposeIntermediateTensorInfo(permutedX)}return result}var sumConfig={kernelName:tfjsCore.Sum,backendName:"cpu",kernelFunc:sum};function einsum(args){var e_1,_a,e_2,_b;var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var equation=attrs.equation;var tensors=inputs;var _c=tfjsCore.backend_util.decodeEinsumEquation(equation,tensors.length),allDims=_c.allDims,summedDims=_c.summedDims,idDims=_c.idDims;tfjsCore.backend_util.checkEinsumDimSizes(allDims.length,idDims,tensors);var _d=tfjsCore.backend_util.getEinsumComputePath(summedDims,idDims),path=_d.path,steps=_d.steps;var nSteps=steps.length;var out=null;var numDimsRemaining=allDims.length;var tensorsToDispose=[];for(var i=0;i<nSteps;++i){try{for(var _e=(e_1=void 0,__values(steps[i])),_f=_e.next();!_f.done;_f=_e.next()){var idTerm=_f.value;var _g=tfjsCore.backend_util.getEinsumPermutation(numDimsRemaining,idDims[idTerm]),perm=_g.permutationIndices,dimsToExpand=_g.expandDims;var x=void 0;if(tfjsCore.backend_util.isIdentityPermutation(perm)){x=tensors[idTerm]}else{x=transpose({inputs:{x:tensors[idTerm]},backend:backend,attrs:{perm:perm}});tensorsToDispose.push(x)}var targetShape=x.shape.slice();for(var k=0;k<dimsToExpand.length;++k){targetShape.splice(dimsToExpand[k],0,1)}if(!tfjsCore.util.arraysEqual(x.shape,targetShape)){x=reshape({inputs:{x:x},backend:backend,attrs:{shape:targetShape}});tensorsToDispose.push(x)}if(out===null){out=x}else{out=multiply({inputs:{a:x,b:out},backend:backend});tensorsToDispose.push(out)}}}catch(e_1_1){e_1={error:e_1_1}}finally{try{if(_f&&!_f.done&&(_a=_e.return))_a.call(_e)}finally{if(e_1)throw e_1.error}}if(i<nSteps-1){if(path[i]>=0){out=sum({inputs:{x:out},backend:backend,attrs:{axis:path[i]-(allDims.length-numDimsRemaining),keepDims:false}});tensorsToDispose.push(out)}numDimsRemaining--}}try{for(var tensorsToDispose_1=__values(tensorsToDispose),tensorsToDispose_1_1=tensorsToDispose_1.next();!tensorsToDispose_1_1.done;tensorsToDispose_1_1=tensorsToDispose_1.next()){var tensorInfo=tensorsToDispose_1_1.value;if(tensorInfo===out){continue}backend.disposeIntermediateTensorInfo(tensorInfo)}}catch(e_2_1){e_2={error:e_2_1}}finally{try{if(tensorsToDispose_1_1&&!tensorsToDispose_1_1.done&&(_b=tensorsToDispose_1.return))_b.call(tensorsToDispose_1)}finally{if(e_2)throw e_2.error}}return out}var einsumConfig={kernelName:tfjsCore.Einsum,backendName:"cpu",kernelFunc:einsum};function eluGrad(args){var inputs=args.inputs,backend=args.backend;var dy=inputs.dy,y=inputs.y;assertNotComplex([dy,y],"eluGrad");var resultValues=new Float32Array(tfjsCore.util.sizeFromShape(y.shape));var values=backend.data.get(y.dataId).values;var dyValues=backend.data.get(dy.dataId).values;for(var i=0;i<values.length;++i){var v=values[i];if(v>=1){resultValues[i]=dyValues[i]}else{resultValues[i]=dyValues[i]*(v+1)}}return backend.makeTensorInfo(y.shape,"float32",resultValues)}var eluGradConfig={kernelName:tfjsCore.EluGrad,backendName:"cpu",kernelFunc:eluGrad};var p=tfjsCore.backend_util.ERF_P;var a1=tfjsCore.backend_util.ERF_A1;var a2=tfjsCore.backend_util.ERF_A2;var a3=tfjsCore.backend_util.ERF_A3;var a4=tfjsCore.backend_util.ERF_A4;var a5=tfjsCore.backend_util.ERF_A5;var erf=unaryKernelFunc(tfjsCore.Erf,function(xi){var sign=Math.sign(xi);var v=Math.abs(xi);var t=1/(1+p*v);return sign*(1-((((a5*t+a4)*t+a3)*t+a2)*t+a1)*t*Math.exp(-v*v))});var erfConfig={kernelName:tfjsCore.Erf,backendName:"cpu",kernelFunc:erf};function expandDims(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var input=inputs.input;var dim=attrs.dim;var inputRank=input.shape.length;var newShape=input.shape.slice();var $dim=dim;if(dim<0){tfjsCore.util.assert(-(inputRank+1)<=dim,function(){return"Axis must be in the interval ["+-(inputRank+1)+", "+inputRank+"]"});$dim=inputRank+dim+1}newShape.splice($dim,0,1);return reshape({inputs:{x:input},backend:backend,attrs:{shape:newShape}})}var expandDimsConfig={kernelName:tfjsCore.ExpandDims,backendName:"cpu",kernelFunc:expandDims};var realDivImpl=createSimpleBinaryKernelImpl(function(a,b){return a/b});var div=binaryKernelFunc(tfjsCore.RealDiv,realDivImpl);var realDivConfig={kernelName:tfjsCore.RealDiv,backendName:"cpu",kernelFunc:div};function fftBatch(input,inverse,cpuBackend){var inputShape=input.shape;var batch=inputShape[0];var innerDim=inputShape[1];var inputVals=cpuBackend.data.get(input.dataId);var real2D=inputVals.complexTensorInfos.real;var imag2D=inputVals.complexTensorInfos.imag;var resultShape=[batch,innerDim];var resultSize=tfjsCore.util.sizeFromShape(resultShape);var resultReal=tfjsCore.util.getTypedArrayFromDType("float32",resultSize);var resultImag=tfjsCore.util.getTypedArrayFromDType("float32",resultSize);for(var b=0;b<batch;b++){var r=slice({inputs:{x:real2D},backend:cpuBackend,attrs:{begin:[b,0],size:[1,innerDim]}});var i=slice({inputs:{x:imag2D},backend:cpuBackend,attrs:{begin:[b,0],size:[1,innerDim]}});var input_1=complex({inputs:{real:r,imag:i},backend:cpuBackend});var _a=fftImpl(input_1,inverse,cpuBackend),real_1=_a.real,imag_1=_a.imag;var res=tfjsCore.backend_util.mergeRealAndImagArrays(real_1,imag_1);for(var d=0;d<innerDim;d++){var c=tfjsCore.backend_util.getComplexWithIndex(res,d);resultReal[b*innerDim+d]=c.real;resultImag[b*innerDim+d]=c.imag}cpuBackend.disposeIntermediateTensorInfo(r);cpuBackend.disposeIntermediateTensorInfo(i);cpuBackend.disposeIntermediateTensorInfo(input_1)}var $realInfo=cpuBackend.makeTensorInfo(resultShape,"float32",resultReal);var $imagInfo=cpuBackend.makeTensorInfo(resultShape,"float32",resultImag);var result=complex({inputs:{real:$realInfo,imag:$imagInfo},backend:cpuBackend});cpuBackend.disposeIntermediateTensorInfo($realInfo);cpuBackend.disposeIntermediateTensorInfo($imagInfo);return result}function fftImpl(input,inverse,cpuBackend){var inputSize=tfjsCore.util.sizeFromShape(input.shape);var inputVals=cpuBackend.data.get(input.dataId);var realVals=cpuBackend.data.get(inputVals.complexTensorInfos.real.dataId).values;var imagVals=cpuBackend.data.get(inputVals.complexTensorInfos.imag.dataId).values;if(isExponentOf2(inputSize)){var result=fftRadix2(realVals,imagVals,inputSize,inverse,cpuBackend);var resultShape=[input.shape[0],input.shape[1]];if(inverse){var realInfo=cpuBackend.makeTensorInfo(resultShape,"float32",result.real);var imagInfo=cpuBackend.makeTensorInfo(resultShape,"float32",result.imag);var sizeInfo=cpuBackend.makeTensorInfo([],"float32",tfjsCore.util.createScalarValue(inputSize,"float32"));var sizeInfoCopy=identity({inputs:{x:sizeInfo},backend:cpuBackend});var divRealInfo=realDivConfig.kernelFunc({inputs:{a:realInfo,b:sizeInfo},backend:cpuBackend});var divImagInfo=realDivConfig.kernelFunc({inputs:{a:imagInfo,b:sizeInfoCopy},backend:cpuBackend});var divRealVals=cpuBackend.data.get(divRealInfo.dataId).values;var divImagVals=cpuBackend.data.get(divImagInfo.dataId).values;cpuBackend.disposeIntermediateTensorInfo(realInfo);cpuBackend.disposeIntermediateTensorInfo(imagInfo);cpuBackend.disposeIntermediateTensorInfo(sizeInfo);cpuBackend.disposeIntermediateTensorInfo(sizeInfoCopy);cpuBackend.disposeIntermediateTensorInfo(divRealInfo);cpuBackend.disposeIntermediateTensorInfo(divImagInfo);return{real:divRealVals,imag:divImagVals}}return result}else{var data=tfjsCore.backend_util.mergeRealAndImagArrays(realVals,imagVals);var rawOutput=fourierTransformByMatmul(data,inputSize,inverse);return tfjsCore.backend_util.splitRealAndImagArrays(rawOutput)}}function isExponentOf2(size){return(size&size-1)===0}function fftRadix2(realVals,imagVals,size,inverse,cpuBackend){if(size===1){return{real:realVals,imag:imagVals}}var data=tfjsCore.backend_util.mergeRealAndImagArrays(realVals,imagVals);var half=size/2;var evenComplex=tfjsCore.backend_util.complexWithEvenIndex(data);var evenRealVals=evenComplex.real;var evenImagVals=evenComplex.imag;var evenShape=[evenRealVals.length];var evenRealInfo=cpuBackend.makeTensorInfo(evenShape,"float32",evenRealVals);var evenImagInfo=cpuBackend.makeTensorInfo(evenShape,"float32",evenImagVals);var evenTensorInfo=complex({inputs:{real:evenRealInfo,imag:evenImagInfo},backend:cpuBackend});var oddComplex=tfjsCore.backend_util.complexWithOddIndex(data);var oddRealVals=oddComplex.real;var oddImagVals=oddComplex.imag;var oddShape=[oddRealVals.length];var oddRealInfo=cpuBackend.makeTensorInfo(oddShape,"float32",oddRealVals);var oddImagInfo=cpuBackend.makeTensorInfo(oddShape,"float32",oddImagVals);var oddTensorInfo=complex({inputs:{real:oddRealInfo,imag:oddImagInfo},backend:cpuBackend});var $evenComplex=fftRadix2(evenRealVals,evenImagVals,half,inverse,cpuBackend);var $evenRealVals=$evenComplex.real;var $evenImagVals=$evenComplex.imag;var $evenShape=[$evenRealVals.length];var $evenRealInfo=cpuBackend.makeTensorInfo($evenShape,"float32",$evenRealVals);var $evenImagInfo=cpuBackend.makeTensorInfo($evenShape,"float32",$evenImagVals);var $evenTensorInfo=complex({inputs:{real:$evenRealInfo,imag:$evenImagInfo},backend:cpuBackend});var $oddComplex=fftRadix2(oddRealVals,oddImagVals,half,inverse,cpuBackend);var $oddRealVals=$oddComplex.real;var $oddImagVals=$oddComplex.imag;var $oddShape=[$oddRealVals.length];var $oddRealInfo=cpuBackend.makeTensorInfo($oddShape,"float32",$oddRealVals);var $oddImagInfo=cpuBackend.makeTensorInfo($oddShape,"float32",$oddImagVals);var $oddTensorInfo=complex({inputs:{real:$oddRealInfo,imag:$oddImagInfo},backend:cpuBackend});var e=tfjsCore.backend_util.exponents(size,inverse);var eShape=[e.real.length];var eRealInfo=cpuBackend.makeTensorInfo(eShape,"float32",e.real);var eImagInfo=cpuBackend.makeTensorInfo(eShape,"float32",e.imag);var complexInfo=complex({inputs:{real:eRealInfo,imag:eImagInfo},backend:cpuBackend});var exponentInfo=multiply({inputs:{a:complexInfo,b:$oddTensorInfo},backend:cpuBackend});var addPart=add({inputs:{a:$evenTensorInfo,b:exponentInfo},backend:cpuBackend});var subPart=sub({inputs:{a:$evenTensorInfo,b:exponentInfo},backend:cpuBackend});var addPartReal=real({inputs:{input:addPart},backend:cpuBackend});var subPartReal=real({inputs:{input:subPart},backend:cpuBackend});var addPartImag=imag({inputs:{input:addPart},backend:cpuBackend});var subPartImag=imag({inputs:{input:subPart},backend:cpuBackend});var $real=concat({inputs:[addPartReal,subPartReal],backend:cpuBackend,attrs:{axis:0}});var $imag=concat({inputs:[addPartImag,subPartImag],backend:cpuBackend,attrs:{axis:0}});var $realVals=cpuBackend.data.get($real.dataId).values;var $imagVals=cpuBackend.data.get($imag.dataId).values;cpuBackend.disposeIntermediateTensorInfo(evenRealInfo);cpuBackend.disposeIntermediateTensorInfo(evenImagInfo);cpuBackend.disposeIntermediateTensorInfo(evenTensorInfo);cpuBackend.disposeIntermediateTensorInfo(oddRealInfo);cpuBackend.disposeIntermediateTensorInfo(oddImagInfo);cpuBackend.disposeIntermediateTensorInfo(oddTensorInfo);cpuBackend.disposeIntermediateTensorInfo($evenRealInfo);cpuBackend.disposeIntermediateTensorInfo($evenImagInfo);cpuBackend.disposeIntermediateTensorInfo($evenTensorInfo);cpuBackend.disposeIntermediateTensorInfo($oddRealInfo);cpuBackend.disposeIntermediateTensorInfo($oddImagInfo);cpuBackend.disposeIntermediateTensorInfo($oddTensorInfo);cpuBackend.disposeIntermediateTensorInfo(eRealInfo);cpuBackend.disposeIntermediateTensorInfo(eImagInfo);cpuBackend.disposeIntermediateTensorInfo(complexInfo);cpuBackend.disposeIntermediateTensorInfo(exponentInfo);cpuBackend.disposeIntermediateTensorInfo(addPart);cpuBackend.disposeIntermediateTensorInfo(subPart);cpuBackend.disposeIntermediateTensorInfo(addPartReal);cpuBackend.disposeIntermediateTensorInfo(addPartImag);cpuBackend.disposeIntermediateTensorInfo(subPartReal);cpuBackend.disposeIntermediateTensorInfo(subPartImag);cpuBackend.disposeIntermediateTensorInfo($real);cpuBackend.disposeIntermediateTensorInfo($imag);return{real:$realVals,imag:$imagVals}}function fourierTransformByMatmul(data,size,inverse){var ret=new Float32Array(size*2);for(var r=0;r<size;r++){var real_2=0;var imag_2=0;for(var c=0;c<size;c++){var e=tfjsCore.backend_util.exponent(r*c,size,inverse);var term=tfjsCore.backend_util.getComplexWithIndex(data,c);real_2+=term.real*e.real-term.imag*e.imag;imag_2+=term.real*e.imag+term.imag*e.real}if(inverse){real_2/=size;imag_2/=size}tfjsCore.backend_util.assignToTypedArray(ret,real_2,imag_2,r)}return ret}function fft(args){var inputs=args.inputs,backend=args.backend;var input=inputs.input;var inputSize=tfjsCore.util.sizeFromShape(input.shape);var innerDimensionSize=input.shape[input.shape.length-1];var batch=inputSize/innerDimensionSize;var input2D=reshape({inputs:{x:input},backend:backend,attrs:{shape:[batch,innerDimensionSize]}});var result=fftBatch(input2D,false,backend);var resultReshaped=reshape({inputs:{x:result},backend:backend,attrs:{shape:input.shape}});backend.disposeIntermediateTensorInfo(input2D);backend.disposeIntermediateTensorInfo(result);return resultReshaped}var fftConfig={kernelName:tfjsCore.FFT,backendName:"cpu",kernelFunc:fft};function fill(args){var backend=args.backend,attrs=args.attrs;var shape=attrs.shape,value=attrs.value,dtype=attrs.dtype;var $dtype=dtype||tfjsCore.util.inferDtype(value);var values=tfjsCore.util.getArrayFromDType($dtype,tfjsCore.util.sizeFromShape(shape));fillValues(values,value,$dtype);return backend.makeTensorInfo(shape,$dtype,values)}var fillConfig={kernelName:tfjsCore.Fill,backendName:"cpu",kernelFunc:fill};function fillValues(values,value,dtype){if(dtype==="string"){values.fill(value)}else{values.fill(value)}}var flipLeftRightConfig={kernelName:tfjsCore.FlipLeftRight,backendName:"cpu",kernelFunc:function(_a){var inputs=_a.inputs;_a.attrs;var backend=_a.backend;var image=inputs.image;var cpuBackend=backend;var output=tfjsCore.util.getTypedArrayFromDType(image.dtype,tfjsCore.util.sizeFromShape(image.shape));var _b=__read(image.shape,4),batch=_b[0],imageHeight=_b[1],imageWidth=_b[2],numChannels=_b[3];var imageVals=cpuBackend.data.get(image.dataId).values;for(var batchIdx=0;batchIdx<batch;batchIdx++){var batchOffset=batchIdx*imageWidth*imageHeight*numChannels;for(var row=0;row<imageHeight;row++){var rowOffset=row*(imageWidth*numChannels);for(var col=0;col<imageWidth;col++){var colOffset=col*numChannels;for(var channel=0;channel<numChannels;channel++){var coordX=Math.round(imageWidth-col-1);var outIdx=batchOffset+rowOffset+colOffset+channel;var outputValue=imageVals[outIdx];if(coordX>=0&&coordX<imageWidth){var rotatedColOffset=coordX*numChannels;var imageIdx=batchOffset+rowOffset+rotatedColOffset+channel;outputValue=imageVals[imageIdx]}output[outIdx]=outputValue}}}}var dataId=cpuBackend.write(output,image.shape,image.dtype);return{dataId:dataId,shape:image.shape,dtype:image.dtype}}};var floorDivImpl=createSimpleBinaryKernelImpl(function(a,b){return Math.floor(a/b)});var floorDiv=binaryKernelFunc(tfjsCore.FloorDiv,floorDivImpl,null,"int32");var floorDivConfig={kernelName:tfjsCore.FloorDiv,backendName:"cpu",kernelFunc:floorDiv};function fusedConv2D(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,filter=inputs.filter,bias=inputs.bias,preluActivationWeights=inputs.preluActivationWeights;var strides=attrs.strides,pad=attrs.pad,dataFormat=attrs.dataFormat,dilations=attrs.dilations,dimRoundingMode=attrs.dimRoundingMode,activation=attrs.activation,leakyreluAlpha=attrs.leakyreluAlpha;var result=conv2D({inputs:{x:x,filter:filter},backend:backend,attrs:{strides:strides,pad:pad,dataFormat:dataFormat,dilations:dilations,dimRoundingMode:dimRoundingMode}});if(bias){var resultOld=result;result=add({inputs:{a:result,b:bias},backend:backend});backend.disposeIntermediateTensorInfo(resultOld)}if(activation){var resultOld=result;result=applyActivation(backend,result,activation,preluActivationWeights,leakyreluAlpha);backend.disposeIntermediateTensorInfo(resultOld)}return result}var fusedConv2DConfig={kernelName:tfjsCore.FusedConv2D,backendName:"cpu",kernelFunc:fusedConv2D};function fusedDepthwiseConv2D(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,filter=inputs.filter,bias=inputs.bias,preluActivationWeights=inputs.preluActivationWeights;var strides=attrs.strides,pad=attrs.pad,dataFormat=attrs.dataFormat,dilations=attrs.dilations,dimRoundingMode=attrs.dimRoundingMode,activation=attrs.activation,leakyreluAlpha=attrs.leakyreluAlpha;var result=depthwiseConv2dNative({inputs:{x:x,filter:filter},backend:backend,attrs:{strides:strides,pad:pad,dataFormat:dataFormat,dilations:dilations,dimRoundingMode:dimRoundingMode}});if(bias){var oldResult=result;result=add({inputs:{a:result,b:bias},backend:backend});backend.disposeIntermediateTensorInfo(oldResult)}if(activation){var oldResult=result;result=applyActivation(backend,result,activation,preluActivationWeights,leakyreluAlpha);backend.disposeIntermediateTensorInfo(oldResult)}return result}var fusedDepthwiseConv2DConfig={kernelName:tfjsCore.FusedDepthwiseConv2D,backendName:"cpu",kernelFunc:fusedDepthwiseConv2D};function gatherNd(args){var inputs=args.inputs,backend=args.backend;var params=inputs.params,indices=inputs.indices;var paramsSize=tfjsCore.util.sizeFromShape(params.shape);var indicesShape=indices.shape;var sliceRank=indicesShape[indicesShape.length-1];var _a=__read(tfjsCore.backend_util.prepareAndValidate(params,indices),4),resultShape=_a[0],numSlices=_a[1],sliceSize=_a[2],strides=_a[3];if(numSlices===0){return backend.makeTensorInfo(resultShape,params.dtype,[])}var indicesData=backend.data.get(indices.dataId).values;var paramsBuf=backend.bufferSync(params);var outBuf=gatherNdImpl(indicesData,paramsBuf,params.dtype,numSlices,sliceRank,sliceSize,strides,params.shape,paramsSize);return backend.makeTensorInfo(resultShape,params.dtype,outBuf.values)}var gatherNdConfig={kernelName:tfjsCore.GatherNd,backendName:"cpu",kernelFunc:gatherNd};function gatherV2(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,indices=inputs.indices;var axis=attrs.axis,batchDims=attrs.batchDims;assertNotComplex([x,indices],"gatherV2");var parsedAxis=tfjsCore.util.parseAxisParam(axis,x.shape)[0];var indicesVals=backend.data.get(indices.dataId).values;var axisDim=x.shape[parsedAxis];var _loop_1=function(i){var index=indicesVals[i];tfjsCore.util.assert(index<=axisDim-1&&index>=0,function(){return"GatherV2: the index value "+index+" is not in [0, "+(axisDim-1)+"]"})};for(var i=0;i<indicesVals.length;++i){_loop_1(i)}var $batchDims=batchDims;if(batchDims==null){$batchDims=0}var indicesSize=tfjsCore.util.sizeFromShape(indices.shape);var shapeInfo=tfjsCore.backend_util.segment_util.collectGatherOpShapeInfo(x,indices,parsedAxis,$batchDims);var flattenX=reshape({inputs:{x:x},backend:backend,attrs:{shape:[shapeInfo.batchSize,shapeInfo.outerSize,shapeInfo.dimSize,shapeInfo.sliceSize]}});var flattenIndex=reshape({inputs:{x:indices},backend:backend,attrs:{shape:[shapeInfo.batchSize,indicesSize/shapeInfo.batchSize]}});var flattenOutputShape=[shapeInfo.batchSize,shapeInfo.outerSize,indicesSize/shapeInfo.batchSize,shapeInfo.sliceSize];var indicesBuf=backend.bufferSync(flattenIndex);var xBuf=backend.bufferSync(flattenX);var outBuf=gatherV2Impl(xBuf,indicesBuf,flattenOutputShape);backend.disposeIntermediateTensorInfo(flattenX);backend.disposeIntermediateTensorInfo(flattenIndex);return backend.makeTensorInfo(shapeInfo.outputShape,outBuf.dtype,outBuf.values)}var gatherV2Config={kernelName:tfjsCore.GatherV2,backendName:"cpu",kernelFunc:gatherV2};function ifft(args){var inputs=args.inputs,backend=args.backend;var input=inputs.input;var inputSize=tfjsCore.util.sizeFromShape(input.shape);var innerDimensionSize=input.shape[input.shape.length-1];var batch=inputSize/innerDimensionSize;var input2D=reshape({inputs:{x:input},backend:backend,attrs:{shape:[batch,innerDimensionSize]}});var result=fftBatch(input2D,true,backend);var resultReshaped=reshape({inputs:{x:result},backend:backend,attrs:{shape:input.shape}});backend.disposeIntermediateTensorInfo(input2D);backend.disposeIntermediateTensorInfo(result);return resultReshaped}var ifftConfig={kernelName:tfjsCore.IFFT,backendName:"cpu",kernelFunc:ifft};var isFinite=unaryKernelFunc(tfjsCore.IsFinite,function(xi){return Number.isFinite(xi)?1:0},"bool");var isFiniteConfig={kernelName:tfjsCore.IsFinite,backendName:"cpu",kernelFunc:isFinite};var isInf=unaryKernelFunc(tfjsCore.IsInf,function(xi){return Math.abs(xi)===Infinity?1:0},"bool");var isInfConfig={kernelName:tfjsCore.IsInf,backendName:"cpu",kernelFunc:isInf};var isNaN$1=unaryKernelFunc(tfjsCore.IsNan,function(xi){return Number.isNaN(xi)?1:0},"bool");var isNaNConfig={kernelName:tfjsCore.IsNan,backendName:"cpu",kernelFunc:isNaN$1};function linSpace(args){var backend=args.backend,attrs=args.attrs;var start=attrs.start,stop=attrs.stop,num=attrs.num;var outVals=linSpaceImpl(start,stop,num);return backend.makeTensorInfo([outVals.length],"float32",outVals)}var linSpaceConfig={kernelName:tfjsCore.LinSpace,backendName:"cpu",kernelFunc:linSpace};var log1p=unaryKernelFunc(tfjsCore.Log1p,function(xi){return Math.log1p(xi)});var log1pConfig={kernelName:tfjsCore.Log1p,backendName:"cpu",kernelFunc:log1p};var logicalAndImpl=createSimpleBinaryKernelImpl(function(a,b){return a&&b});var logicalAnd=binaryKernelFunc(tfjsCore.LogicalAnd,logicalAndImpl,null,"bool");var logicalAndConfig={kernelName:tfjsCore.LogicalAnd,backendName:"cpu",kernelFunc:logicalAnd};var logicalNot=unaryKernelFunc(tfjsCore.LogicalNot,function(xi){return xi?0:1},"bool");var logicalNotConfig={kernelName:tfjsCore.LogicalNot,backendName:"cpu",kernelFunc:logicalNot};var logicalOrImpl=createSimpleBinaryKernelImpl(function(a,b){return a||b});var logicalOr=binaryKernelFunc(tfjsCore.LogicalOr,logicalOrImpl,null,"bool");var logicalOrConfig={kernelName:tfjsCore.LogicalOr,backendName:"cpu",kernelFunc:logicalOr};function lRN(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var depthRadius=attrs.depthRadius,bias=attrs.bias,alpha=attrs.alpha,beta=attrs.beta;assertNotComplex(x,"LRN");var channels=x.shape[3];var maxD=channels-1;var xValues=backend.data.get(x.dataId).values;var size=tfjsCore.util.sizeFromShape(x.shape);var result=new Float32Array(size);function sumAcrossChannels(offset){var currentChannel=offset%channels;var beginSumOffset=offset-currentChannel+Math.max(0,currentChannel-depthRadius);var endSumOffset=offset-currentChannel+Math.min(currentChannel+depthRadius,maxD);var sum=0;for(;beginSumOffset<=endSumOffset;beginSumOffset++){var z=xValues[beginSumOffset];sum+=z*z}return sum}for(var offset=0;offset<size;offset++){var sum=sumAcrossChannels(offset);var val=xValues[offset]*Math.pow(bias+alpha*sum,-beta);result[offset]=val}return backend.makeTensorInfo(x.shape,x.dtype,result)}var lRNConfig={kernelName:tfjsCore.LRN,backendName:"cpu",kernelFunc:lRN};function lRNGrad(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,y=inputs.y,dy=inputs.dy;var depthRadius=attrs.depthRadius,bias=attrs.bias,alpha=attrs.alpha,beta=attrs.beta;assertNotComplex(dy,"LRNGrad");var dySize=tfjsCore.util.sizeFromShape(dy.shape);var channels=dy.shape[3];var dyValues=backend.data.get(dy.dataId).values;var xValues=backend.data.get(x.dataId).values;var yValues=backend.data.get(y.dataId).values;var result=new Float32Array(dySize);var size=dySize;for(var offset=0;offset<size;offset++){var currentChannel=offset%channels;var depthBegin=offset-currentChannel+Math.max(0,currentChannel-depthRadius);var depthEnd=offset-currentChannel+Math.min(channels,currentChannel+depthRadius+1);var norm=0;for(var k=depthBegin;k<depthEnd;k++){norm+=Math.pow(xValues[k],2)}norm=alpha*norm+bias;for(var k=depthBegin;k<depthEnd;k++){var dyi=-2*alpha*beta*xValues[k]*yValues[offset]/norm;if(offset===k){dyi+=Math.pow(norm,-beta)}dyi*=dyValues[offset];result[k]+=dyi}}return backend.makeTensorInfo(dy.shape,x.dtype,result)}var lRNGradConfig={kernelName:tfjsCore.LRNGrad,backendName:"cpu",kernelFunc:lRNGrad};function max(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var reductionIndices=attrs.reductionIndices,keepDims=attrs.keepDims;var cpuBackend=backend;var xShape=x.shape;var xRank=xShape.length;var origAxes=tfjsCore.util.parseAxisParam(reductionIndices,xShape);var axes=origAxes;var permutedAxes=tfjsCore.backend_util.getAxesPermutation(axes,xRank);var xVals=cpuBackend.data.get(x.dataId).values;if(permutedAxes!=null){var newShape=new Array(xRank);for(var i=0;i<newShape.length;i++){newShape[i]=xShape[permutedAxes[i]]}xVals=transposeImpl(xVals,xShape,x.dtype,permutedAxes,newShape);axes=tfjsCore.backend_util.getInnerMostAxes(axes.length,xRank);xShape=newShape}assertNotComplex(x,"max");tfjsCore.backend_util.assertAxesAreInnerMostDims("max",axes,xRank);var _a=__read(tfjsCore.backend_util.computeOutAndReduceShapes(xShape,axes),2),maxOutShape=_a[0],reduceShape=_a[1];var reduceSize=tfjsCore.util.sizeFromShape(reduceShape);var result=maxImpl(xVals,reduceSize,maxOutShape,x.dtype);var dataId=cpuBackend.write(result,maxOutShape,x.dtype);var outShape=maxOutShape;if(keepDims){var newShape=tfjsCore.backend_util.expandShapeToKeepDim(maxOutShape,origAxes);outShape=newShape}return{dataId:dataId,shape:outShape,dtype:x.dtype}}var maxConfig={kernelName:tfjsCore.Max,backendName:"cpu",kernelFunc:max};function maxPool(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;assertNotComplex(x,"maxPool");var filterSize=attrs.filterSize,strides=attrs.strides,pad=attrs.pad,dimRoundingMode=attrs.dimRoundingMode;var dilations=1;tfjsCore.util.assert(tfjsCore.backend_util.eitherStridesOrDilationsAreOne(strides,dilations),function(){return"Error in maxPool: Either strides or dilations must be 1. "+("Got strides "+strides+" and dilations '"+dilations+"'")});var convInfo=tfjsCore.backend_util.computePool2DInfo(x.shape,filterSize,strides,dilations,pad,dimRoundingMode);var res;if(convInfo.filterWidth===1&&convInfo.filterHeight===1&&tfjsCore.util.arraysEqual(convInfo.inShape,convInfo.outShape)){res=identity({inputs:{x:x},backend:backend})}else{var xValues=backend.data.get(x.dataId).values;var strides_1=tfjsCore.util.computeStrides(x.shape);var buffer=pool(xValues,x.shape,x.dtype,strides_1,convInfo,"max");res=backend.makeTensorInfo(convInfo.outShape,x.dtype,buffer.values)}return res}var maxPoolConfig={kernelName:tfjsCore.MaxPool,backendName:"cpu",kernelFunc:maxPool};function maxPool3D(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var filterSize=attrs.filterSize,strides=attrs.strides,pad=attrs.pad,dimRoundingMode=attrs.dimRoundingMode,dataFormat=attrs.dataFormat;assertNotComplex(x,"maxPool3d");var convInfo=tfjsCore.backend_util.computePool3DInfo(x.shape,filterSize,strides,1,pad,dimRoundingMode,dataFormat);var xValues=backend.data.get(x.dataId).values;var outBuf=pool3d(xValues,x.shape,x.dtype,tfjsCore.util.computeStrides(x.shape),convInfo,"max");return backend.makeTensorInfo(outBuf.shape,"float32",outBuf.values)}var maxPool3DConfig={kernelName:tfjsCore.MaxPool3D,backendName:"cpu",kernelFunc:maxPool3D};function maxPool3DGrad(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var dy=inputs.dy,input=inputs.input;var filterSize=attrs.filterSize,strides=attrs.strides,pad=attrs.pad,dimRoundingMode=attrs.dimRoundingMode;assertNotComplex([dy,input],"maxPool3DGrad");var convInfo=tfjsCore.backend_util.computePool3DInfo(input.shape,filterSize,strides,1,pad,dimRoundingMode);var inputBuf=backend.bufferSync(input);var maxPosBuf=maxPool3dPositions(inputBuf,convInfo);var strideDepth=convInfo.strideDepth;var strideHeight=convInfo.strideHeight;var strideWidth=convInfo.strideWidth;var dilationDepth=convInfo.dilationDepth;var dilationHeight=convInfo.dilationHeight;var dilationWidth=convInfo.dilationWidth;var effectiveFilterDepth=convInfo.effectiveFilterDepth;var effectiveFilterHeight=convInfo.effectiveFilterHeight;var effectiveFilterWidth=convInfo.effectiveFilterWidth;var padFront=effectiveFilterDepth-1-convInfo.padInfo.front;var padLeft=effectiveFilterWidth-1-convInfo.padInfo.left;var padTop=effectiveFilterHeight-1-convInfo.padInfo.top;var dx=tfjsCore.buffer(input.shape,"float32");var dyBuf=backend.bufferSync(dy);for(var batch=0;batch<convInfo.batchSize;++batch){for(var channel=0;channel<convInfo.inChannels;++channel){for(var dxDepth=0;dxDepth<convInfo.inDepth;++dxDepth){for(var dxRow=0;dxRow<convInfo.inHeight;++dxRow){for(var dxCol=0;dxCol<convInfo.inWidth;++dxCol){var dyDepthCorner=dxDepth-padFront;var dyRowCorner=dxRow-padTop;var dyColCorner=dxCol-padLeft;var dotProd=0;for(var wDepth=0;wDepth<effectiveFilterDepth;wDepth+=dilationDepth){var dyDepth=(dyDepthCorner+wDepth)/strideDepth;if(dyDepth<0||dyDepth>=convInfo.outDepth||Math.floor(dyDepth)!==dyDepth){continue}for(var wRow=0;wRow<effectiveFilterHeight;wRow+=dilationHeight){var dyRow=(dyRowCorner+wRow)/strideHeight;if(dyRow<0||dyRow>=convInfo.outHeight||Math.floor(dyRow)!==dyRow){continue}for(var wCol=0;wCol<effectiveFilterWidth;wCol+=dilationWidth){var dyCol=(dyColCorner+wCol)/strideWidth;if(dyCol<0||dyCol>=convInfo.outWidth||Math.floor(dyCol)!==dyCol){continue}var maxPos=effectiveFilterDepth*effectiveFilterHeight*effectiveFilterWidth-1-maxPosBuf.get(batch,dyDepth,dyRow,dyCol,channel);var curPos=wDepth*effectiveFilterHeight*effectiveFilterWidth+wRow*effectiveFilterWidth+wCol;var mask=maxPos===curPos?1:0;if(mask===0){continue}var pixel=dyBuf.get(batch,dyDepth,dyRow,dyCol,channel);dotProd+=pixel*mask}}}dx.set(dotProd,batch,dxDepth,dxRow,dxCol,channel)}}}}}return backend.makeTensorInfo(dx.shape,dx.dtype,dx.values)}var maxPool3DGradConfig={kernelName:tfjsCore.MaxPool3DGrad,backendName:"cpu",kernelFunc:maxPool3DGrad};function maxPoolGrad(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var dy=inputs.dy,input=inputs.input,output=inputs.output;var x=input;assertNotComplex([input,output],"maxPoolGrad");var filterSize=attrs.filterSize,strides=attrs.strides,pad=attrs.pad,dimRoundingMode=attrs.dimRoundingMode;var convInfo=tfjsCore.backend_util.computePool2DInfo(x.shape,filterSize,strides,1,pad,dimRoundingMode);var xValues=backend.data.get(x.dataId).values;var maxPosBuf=tfjsCore.buffer(convInfo.outShape,x.dtype,maxPoolPositions(xValues,x.shape,x.dtype,convInfo).values);var strideHeight=convInfo.strideHeight;var strideWidth=convInfo.strideWidth;var dilationHeight=convInfo.dilationHeight;var dilationWidth=convInfo.dilationWidth;var effectiveFilterHeight=convInfo.effectiveFilterHeight;var effectiveFilterWidth=convInfo.effectiveFilterWidth;var padLeft=effectiveFilterWidth-1-convInfo.padInfo.left;var padTop=effectiveFilterHeight-1-convInfo.padInfo.top;var dx=tfjsCore.buffer(x.shape,"float32");var dyData=backend.data.get(dy.dataId).values;var dyBuf=tfjsCore.buffer(dy.shape,"float32",dyData);for(var b=0;b<convInfo.batchSize;++b){for(var d=0;d<convInfo.inChannels;++d){for(var dxR=0;dxR<convInfo.inHeight;++dxR){for(var dxC=0;dxC<convInfo.inWidth;++dxC){var dyRCorner=dxR-padTop;var dyCCorner=dxC-padLeft;var dotProd=0;for(var wR=0;wR<effectiveFilterHeight;wR+=dilationHeight){var dyR=(dyRCorner+wR)/strideHeight;if(dyR<0||dyR>=convInfo.outHeight||Math.floor(dyR)!==dyR){continue}for(var wC=0;wC<effectiveFilterWidth;wC+=dilationWidth){var dyC=(dyCCorner+wC)/strideWidth;if(dyC<0||dyC>=convInfo.outWidth||Math.floor(dyC)!==dyC){continue}var maxPos=effectiveFilterHeight*effectiveFilterWidth-1-maxPosBuf.get(b,dyR,dyC,d);var curPos=wR*effectiveFilterWidth+wC;var mask=maxPos===curPos?1:0;if(mask===0){continue}var pixel=dyBuf.get(b,dyR,dyC,d);dotProd+=pixel*mask}}dx.set(dotProd,b,dxR,dxC,d)}}}}return backend.makeTensorInfo(dx.shape,dx.dtype,dx.values)}var maxPoolGradConfig={kernelName:tfjsCore.MaxPoolGrad,backendName:"cpu",kernelFunc:maxPoolGrad};function maxPoolWithArgmaxImpl(xValues,xShape,dtype,includeBatchInIndex,convInfo){var strides=tfjsCore.util.computeStrides(xShape);var maxPools=pool(xValues,xShape,dtype,strides,convInfo,"max");var maxPositions=maxPoolPositions(xValues,xShape,dtype,convInfo,true,includeBatchInIndex);return[maxPools.values,maxPositions.values]}var maxPoolWithArgmaxConfig={kernelName:tfjsCore.MaxPoolWithArgmax,backendName:"cpu",kernelFunc:function(_a){var inputs=_a.inputs,attrs=_a.attrs,backend=_a.backend;var x=inputs.x;var filterSize=attrs.filterSize,strides=attrs.strides,pad=attrs.pad,includeBatchInIndex=attrs.includeBatchInIndex;var cpuBackend=backend;assertNotComplex(x,"MaxPoolWithArgmax");var values=cpuBackend.data.get(x.dataId).values;var convInfo=tfjsCore.backend_util.computePool2DInfo(x.shape,filterSize,strides,[1,1],pad);var _b=__read(maxPoolWithArgmaxImpl(values,x.shape,x.dtype,includeBatchInIndex,convInfo),2),pooled=_b[0],indexes=_b[1];var pooledDataId=cpuBackend.write(pooled,convInfo.outShape,x.dtype);var indexesDataId=cpuBackend.write(indexes,convInfo.outShape,x.dtype);return[{dataId:pooledDataId,shape:convInfo.outShape,dtype:x.dtype},{dataId:indexesDataId,shape:convInfo.outShape,dtype:"int32"}]}};function mean(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var axis=attrs.axis,keepDims=attrs.keepDims;var axes=tfjsCore.util.parseAxisParam(axis,x.shape);var shapes=tfjsCore.backend_util.computeOutAndReduceShapes(x.shape,axes);var reduceShape=shapes[1];var reduceSize=tfjsCore.util.sizeFromShape(reduceShape);var toDispose=[];var reduceSizeScalar=backend.makeTensorInfo([],"float32",new Float32Array([reduceSize]));toDispose.push(reduceSizeScalar);var $x=cast({inputs:{x:x},backend:backend,attrs:{dtype:"float32"}});toDispose.push($x);var res=div({inputs:{a:$x,b:reduceSizeScalar},backend:backend});toDispose.push(res);var result=sum({inputs:{x:res},backend:backend,attrs:{axis:axis,keepDims:keepDims}});toDispose.forEach(function(t){return backend.disposeIntermediateTensorInfo(t)});return result}var meanConfig={kernelName:tfjsCore.Mean,backendName:"cpu",kernelFunc:mean};function min(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var axis=attrs.axis,keepDims=attrs.keepDims;assertNotComplex(x,"min");var origAxes=tfjsCore.util.parseAxisParam(axis,x.shape);var axes=origAxes;var permutedAxes=tfjsCore.backend_util.getAxesPermutation(axes,x.shape.length);var $x=x;if(permutedAxes!=null){$x=transpose({inputs:{x:x},backend:backend,attrs:{perm:permutedAxes}});axes=tfjsCore.backend_util.getInnerMostAxes(axes.length,x.shape.length)}tfjsCore.backend_util.assertAxesAreInnerMostDims("min",axes,$x.shape.length);var _a=__read(tfjsCore.backend_util.computeOutAndReduceShapes($x.shape,axes),2),outShape=_a[0],reduceShape=_a[1];var reduceSize=tfjsCore.util.sizeFromShape(reduceShape);var vals=tfjsCore.util.makeZerosTypedArray(tfjsCore.util.sizeFromShape(outShape),$x.dtype);var aVals=backend.data.get($x.dataId).values;for(var i=0;i<vals.length;++i){var offset=i*reduceSize;var min_1=aVals[offset];for(var j=0;j<reduceSize;++j){var value=aVals[offset+j];if(Number.isNaN(value)||value<min_1){min_1=value}}vals[i]=min_1}if(permutedAxes!=null){backend.disposeIntermediateTensorInfo($x)}var result=backend.makeTensorInfo(outShape,$x.dtype,vals);if(keepDims){var expandedShape=tfjsCore.backend_util.expandShapeToKeepDim(outShape,origAxes);var reshapedResult=reshape({inputs:{x:result},backend:backend,attrs:{shape:expandedShape}});backend.disposeIntermediateTensorInfo(result);return reshapedResult}return result}var minConfig={kernelName:tfjsCore.Min,backendName:"cpu",kernelFunc:min};function mirrorPad(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var paddings=attrs.paddings,mode=attrs.mode;assertNotComplex(x,"mirrorPad");var outShape=paddings.map(function(p,i){return p[0]+x.shape[i]+p[1]});var start=paddings.map(function(p){return p[0]});var end=paddings.map(function(p,i){return p[0]+x.shape[i]});var offset=mode==="reflect"?0:1;var xVals=backend.data.get(x.dataId).values;var xRank=x.shape.length;var xStrides=tfjsCore.util.computeStrides(x.shape);var resultSize=tfjsCore.util.sizeFromShape(outShape);var resultRank=outShape.length;var resultStrides=tfjsCore.util.computeStrides(outShape);var resVals=tfjsCore.util.getTypedArrayFromDType(x.dtype,resultSize);for(var i=0;i<resultSize;i++){var coords=tfjsCore.util.indexToLoc(i,resultRank,resultStrides);for(var i_1=0;i_1<resultRank;i_1++){if(coords[i_1]<start[i_1]){coords[i_1]=start[i_1]*2-coords[i_1]-offset}else if(coords[i_1]>=end[i_1]){coords[i_1]=(end[i_1]-1)*2-coords[i_1]+offset}}coords=coords.map(function(c,i){return c-start[i]});var inIndex=tfjsCore.util.locToIndex(coords,xRank,xStrides);resVals[i]=xVals[inIndex]}var outId=backend.write(resVals,outShape,x.dtype);return{dataId:outId,shape:outShape,dtype:x.dtype}}var mirrorPadConfig={kernelName:tfjsCore.MirrorPad,backendName:"cpu",kernelFunc:mirrorPad};var modImpl=createSimpleBinaryKernelImpl(function(aValue,bValue){var rem=aValue%bValue;if(aValue<0&&bValue<0||aValue>=0&&bValue>=0){return rem}else{return(rem+bValue)%bValue}});var mod=binaryKernelFunc(tfjsCore.Mod,modImpl);var modConfig={kernelName:tfjsCore.Mod,backendName:"cpu",kernelFunc:mod};function softmax(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var logits=inputs.logits;var dim=attrs.dim;var logitsRank=logits.shape.length;var $dim=dim;if($dim===-1){$dim=logitsRank-1}if($dim!==logitsRank-1){throw Error("Softmax along a non-last dimension is not yet supported. "+("Logits was rank "+logitsRank+" and dim was "+$dim))}var axes=tfjsCore.util.parseAxisParam([$dim],logits.shape);var maxLogit=max({inputs:{x:logits},backend:backend,attrs:{reductionIndices:axes,keepDims:false}});var expandedShape=tfjsCore.backend_util.expandShapeToKeepDim(maxLogit.shape,axes);var maxLogitReshaped=reshape({inputs:{x:maxLogit},backend:backend,attrs:{shape:expandedShape}});var a=sub({inputs:{a:logits,b:maxLogitReshaped},backend:backend});var b=exp({inputs:{x:a},backend:backend});var sumExp=sum({inputs:{x:b},backend:backend,attrs:{axis:axes,keepDims:false}});var sumReshaped=reshape({inputs:{x:sumExp},backend:backend,attrs:{shape:expandedShape}});var result=div({inputs:{a:b,b:sumReshaped},backend:backend});backend.disposeIntermediateTensorInfo(maxLogit);backend.disposeIntermediateTensorInfo(maxLogitReshaped);backend.disposeIntermediateTensorInfo(a);backend.disposeIntermediateTensorInfo(b);backend.disposeIntermediateTensorInfo(sumExp);backend.disposeIntermediateTensorInfo(sumReshaped);return result}var softmaxConfig={kernelName:tfjsCore.Softmax,backendName:"cpu",kernelFunc:softmax};function multinomial(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var logits=inputs.logits;var numSamples=attrs.numSamples,seed=attrs.seed,normalized=attrs.normalized;assertNotComplex(logits,"multinomial");var probabilities=normalized?logits:softmax({inputs:{logits:logits},backend:backend,attrs:{dim:-1}});var batchSize=probabilities.shape[0];var numEvents=probabilities.shape[1];var probVals=backend.data.get(probabilities.dataId).values;var resShape=[batchSize,numSamples];var resVals=tfjsCore.util.makeZerosTypedArray(tfjsCore.util.sizeFromShape(resShape),"int32");for(var b=0;b<batchSize;++b){var offset=b*numEvents;var cdf=new Float32Array(numEvents-1);cdf[0]=probVals[offset];for(var event=1;event<cdf.length;++event){cdf[event]=cdf[event-1]+probVals[offset+event]}var random=seedrandom__namespace.alea(seed.toString());var outOffset=b*numSamples;for(var sampleId=0;sampleId<numSamples;++sampleId){var r=random();resVals[outOffset+sampleId]=cdf.length;for(var event=0;event<cdf.length;event++){if(r<cdf[event]){resVals[outOffset+sampleId]=event;break}}}}if(!normalized){backend.disposeIntermediateTensorInfo(probabilities)}return backend.makeTensorInfo(resShape,"int32",resVals)}var multinomialConfig={kernelName:tfjsCore.Multinomial,backendName:"cpu",kernelFunc:multinomial};var nonMaxSuppressionV3Impl=tfjsCore.kernel_impls.nonMaxSuppressionV3Impl;function nonMaxSuppressionV3(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var boxes=inputs.boxes,scores=inputs.scores;var maxOutputSize=attrs.maxOutputSize,iouThreshold=attrs.iouThreshold,scoreThreshold=attrs.scoreThreshold;assertNotComplex(boxes,"NonMaxSuppression");var boxesVals=backend.data.get(boxes.dataId).values;var scoresVals=backend.data.get(scores.dataId).values;var selectedIndices=nonMaxSuppressionV3Impl(boxesVals,scoresVals,maxOutputSize,iouThreshold,scoreThreshold).selectedIndices;return backend.makeTensorInfo([selectedIndices.length],"int32",new Int32Array(selectedIndices))}var nonMaxSuppressionV3Config={kernelName:tfjsCore.NonMaxSuppressionV3,backendName:"cpu",kernelFunc:nonMaxSuppressionV3};var nonMaxSuppressionV4Impl=tfjsCore.kernel_impls.nonMaxSuppressionV4Impl;function nonMaxSuppressionV4(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var boxes=inputs.boxes,scores=inputs.scores;var maxOutputSize=attrs.maxOutputSize,iouThreshold=attrs.iouThreshold,scoreThreshold=attrs.scoreThreshold,padToMaxOutputSize=attrs.padToMaxOutputSize;assertNotComplex(boxes,"NonMaxSuppressionPadded");var boxesVals=backend.data.get(boxes.dataId).values;var scoresVals=backend.data.get(scores.dataId).values;var _a=nonMaxSuppressionV4Impl(boxesVals,scoresVals,maxOutputSize,iouThreshold,scoreThreshold,padToMaxOutputSize),selectedIndices=_a.selectedIndices,validOutputs=_a.validOutputs;return[backend.makeTensorInfo([selectedIndices.length],"int32",new Int32Array(selectedIndices)),backend.makeTensorInfo([],"int32",new Int32Array([validOutputs]))]}var nonMaxSuppressionV4Config={kernelName:tfjsCore.NonMaxSuppressionV4,backendName:"cpu",kernelFunc:nonMaxSuppressionV4};var nonMaxSuppressionV5Impl=tfjsCore.kernel_impls.nonMaxSuppressionV5Impl;function nonMaxSuppressionV5(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var boxes=inputs.boxes,scores=inputs.scores;var maxOutputSize=attrs.maxOutputSize,iouThreshold=attrs.iouThreshold,scoreThreshold=attrs.scoreThreshold,softNmsSigma=attrs.softNmsSigma;assertNotComplex(boxes,"NonMaxSuppressionWithScore");var boxesVals=backend.data.get(boxes.dataId).values;var scoresVals=backend.data.get(scores.dataId).values;var maxOutputSizeVal=maxOutputSize;var iouThresholdVal=iouThreshold;var scoreThresholdVal=scoreThreshold;var softNmsSigmaVal=softNmsSigma;var _a=nonMaxSuppressionV5Impl(boxesVals,scoresVals,maxOutputSizeVal,iouThresholdVal,scoreThresholdVal,softNmsSigmaVal),selectedIndices=_a.selectedIndices,selectedScores=_a.selectedScores;return[backend.makeTensorInfo([selectedIndices.length],"int32",new Int32Array(selectedIndices)),backend.makeTensorInfo([selectedScores.length],"float32",new Float32Array(selectedScores))]}var nonMaxSuppressionV5Config={kernelName:tfjsCore.NonMaxSuppressionV5,backendName:"cpu",kernelFunc:nonMaxSuppressionV5};function oneHot(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var indices=inputs.indices;var depth=attrs.depth,onValue=attrs.onValue,offValue=attrs.offValue;assertNotComplex(indices,"oneHot");var indicesSize=tfjsCore.util.sizeFromShape(indices.shape);var res=new Float32Array(indicesSize*depth);res.fill(offValue);var indicesVal=backend.data.get(indices.dataId).values;for(var event=0;event<indicesSize;++event){if(indicesVal[event]>=0&&indicesVal[event]<depth){res[event*depth+indicesVal[event]]=onValue}}return backend.makeTensorInfo(__spread(indices.shape,[depth]),"int32",res)}var oneHotConfig={kernelName:tfjsCore.OneHot,backendName:"cpu",kernelFunc:oneHot};function zerosLike(args){var inputs=args.inputs,backend=args.backend;var x=inputs.x;if(x.dtype==="string"){throw new Error("zerosLike is not supported for string tensors")}else if(x.dtype==="complex64"){var realPart=real({inputs:{input:x},backend:backend});var r=zerosLike({inputs:{x:realPart},backend:backend});var imagPart=imag({inputs:{input:x},backend:backend});var i=zerosLike({inputs:{x:imagPart},backend:backend});var result=complex({inputs:{real:r,imag:i},backend:backend});backend.disposeIntermediateTensorInfo(realPart);backend.disposeIntermediateTensorInfo(r);backend.disposeIntermediateTensorInfo(imagPart);backend.disposeIntermediateTensorInfo(i);return result}else{return fill({backend:backend,attrs:{shape:x.shape,value:0,dtype:x.dtype}})}}var zerosLikeConfig={kernelName:tfjsCore.ZerosLike,backendName:"cpu",kernelFunc:zerosLike};function onesLike(args){var inputs=args.inputs,backend=args.backend;var x=inputs.x;if(x.dtype==="string"){throw new Error("onesLike is not supported for string tensors")}else if(x.dtype==="complex64"){var realPart=real({inputs:{input:x},backend:backend});var r=onesLike({inputs:{x:realPart},backend:backend});var imagPart=imag({inputs:{input:x},backend:backend});var i=zerosLike({inputs:{x:imagPart},backend:backend});var result=complex({inputs:{real:r,imag:i},backend:backend});backend.disposeIntermediateTensorInfo(realPart);backend.disposeIntermediateTensorInfo(r);backend.disposeIntermediateTensorInfo(imagPart);backend.disposeIntermediateTensorInfo(i);return result}else{return fill({backend:backend,attrs:{shape:x.shape,value:1,dtype:x.dtype}})}}var onesLikeConfig={kernelName:tfjsCore.OnesLike,backendName:"cpu",kernelFunc:onesLike};function pack(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var axis=attrs.axis;if(inputs.length===1){return expandDims({inputs:{input:inputs[0]},backend:backend,attrs:{dim:axis}})}var shape=inputs[0].shape;var dtype=inputs[0].dtype;inputs.forEach(function(t){tfjsCore.util.assertShapesMatch(shape,t.shape,"All tensors passed to stack must have matching shapes");tfjsCore.util.assert(dtype===t.dtype,function(){return"All tensors passed to stack must have matching dtypes"})});var intermediateTensorInfos=[];var expandedTensors=inputs.map(function(t){var expandedT=expandDims({inputs:{input:t},backend:backend,attrs:{dim:axis}});intermediateTensorInfos.push(expandedT);return expandedT});var result=concat({inputs:expandedTensors,backend:backend,attrs:{axis:axis}});intermediateTensorInfos.forEach(function(t){return backend.disposeIntermediateTensorInfo(t)});return result}var packConfig={kernelName:tfjsCore.Pack,backendName:"cpu",kernelFunc:pack};function padV2(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var paddings=attrs.paddings,constantValue=attrs.constantValue;assertNotComplex(x,"pad");var outShape=paddings.map(function(p,i){return p[0]+x.shape[i]+p[1]});var start=paddings.map(function(p){return p[0]});var xVals=backend.data.get(x.dataId).values;var xSize=tfjsCore.util.sizeFromShape(x.shape);var xRank=x.shape.length;var xStrides=tfjsCore.util.computeStrides(x.shape);var resultSize=tfjsCore.util.sizeFromShape(outShape);var resultRank=outShape.length;var resultStrides=tfjsCore.util.computeStrides(outShape);var resVals=tfjsCore.util.getTypedArrayFromDType(x.dtype,resultSize);if(constantValue!==0){resVals.fill(constantValue)}for(var i=0;i<xSize;i++){var coords=tfjsCore.util.indexToLoc(i,xRank,xStrides);var outCoords=coords.map(function(c,i){return c+start[i]});var outIndex=tfjsCore.util.locToIndex(outCoords,resultRank,resultStrides);resVals[outIndex]=xVals[i]}var outId=backend.write(resVals,outShape,x.dtype);return{dataId:outId,shape:outShape,dtype:x.dtype}}var padV2Config={kernelName:tfjsCore.PadV2,backendName:"cpu",kernelFunc:padV2};var powImpl=createSimpleBinaryKernelImpl(function(a,b){return Math.pow(a,b)});var pow=binaryKernelFunc(tfjsCore.Pow,powImpl);var powConfig={kernelName:tfjsCore.Pow,backendName:"cpu",kernelFunc:pow};function range(args){var backend=args.backend,attrs=args.attrs;var start=attrs.start,stop=attrs.stop,dtype=attrs.dtype,step=attrs.step;var values=rangeImpl(start,stop,step,dtype);return backend.makeTensorInfo([values.length],dtype,values)}var rangeConfig={kernelName:tfjsCore.Range,backendName:"cpu",kernelFunc:range};var reciprocal=unaryKernelFunc(tfjsCore.Reciprocal,function(xi){return 1/xi});var reciprocalConfig={kernelName:tfjsCore.Reciprocal,backendName:"cpu",kernelFunc:reciprocal};function resizeBilinear(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var images=inputs.images;var alignCorners=attrs.alignCorners,halfPixelCenters=attrs.halfPixelCenters,size=attrs.size;assertNotComplex(images,"resizeBilinear");var imagesStrides=tfjsCore.util.computeStrides(images.shape);var _a=__read(size,2),newHeight=_a[0],newWidth=_a[1];var _b=__read(images.shape,4),batch=_b[0],oldHeight=_b[1],oldWidth=_b[2],numChannels=_b[3];var xValues=backend.data.get(images.dataId).values;var result=new Float32Array(tfjsCore.util.sizeFromShape([batch,newHeight,newWidth,numChannels]));var effectiveInputSize=[alignCorners&&newHeight>1?oldHeight-1:oldHeight,alignCorners&&newWidth>1?oldWidth-1:oldWidth];var effectiveOutputSize=[alignCorners&&newHeight>1?newHeight-1:newHeight,alignCorners&&newWidth>1?newWidth-1:newWidth];var outputIdx=0;var effectiveRowSizeRatio=effectiveInputSize[0]/effectiveOutputSize[0];var effectiveColSizeRatio=effectiveInputSize[1]/effectiveOutputSize[1];for(var b=0;b<batch;b++){for(var r=0;r<newHeight;r++){var sourceFracRow=void 0;if(halfPixelCenters){sourceFracRow=effectiveRowSizeRatio*(r+.5)-.5}else{sourceFracRow=effectiveRowSizeRatio*r}var sourceRowFloor=Math.max(0,Math.floor(sourceFracRow));var rowFrac=sourceFracRow-sourceRowFloor;var sourceRowCeil=Math.min(oldHeight-1,Math.ceil(sourceFracRow));var topRowOffset=b*imagesStrides[0]+sourceRowFloor*imagesStrides[1];var botRowOffset=b*imagesStrides[0]+sourceRowCeil*imagesStrides[1];for(var c=0;c<newWidth;c++){var sourceFracCol=void 0;if(halfPixelCenters){sourceFracCol=effectiveColSizeRatio*(c+.5)-.5}else{sourceFracCol=effectiveColSizeRatio*c}var sourceColFloor=Math.max(0,Math.floor(sourceFracCol));var colFrac=sourceFracCol-sourceColFloor;var sourceColCeil=Math.min(oldWidth-1,Math.ceil(sourceFracCol));var topLeftOffest=topRowOffset+sourceColFloor*imagesStrides[2];var botLeftOffset=botRowOffset+sourceColFloor*imagesStrides[2];var topRightOffset=topRowOffset+sourceColCeil*imagesStrides[2];var botRightOffest=botRowOffset+sourceColCeil*imagesStrides[2];for(var d=0;d<numChannels;d++){var topLeft=xValues[topLeftOffest+d];var bottomLeft=xValues[botLeftOffset+d];var topRight=xValues[topRightOffset+d];var bottomRight=xValues[botRightOffest+d];var top=topLeft+(topRight-topLeft)*colFrac;var bottom=bottomLeft+(bottomRight-bottomLeft)*colFrac;var newValue=top+(bottom-top)*rowFrac;result[outputIdx++]=newValue}}}}return backend.makeTensorInfo([batch,newHeight,newWidth,numChannels],"float32",result)}var resizeBilinearConfig={kernelName:tfjsCore.ResizeBilinear,backendName:"cpu",kernelFunc:resizeBilinear};function resizeBilinearGrad(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var images=inputs.images,dy=inputs.dy;var alignCorners=attrs.alignCorners;assertNotComplex([dy,images],"resizeBilinearGrad");var imagesStrides=tfjsCore.util.computeStrides(images.shape);var _a=__read(images.shape,4),batch=_a[0],xHeight=_a[1],xWidth=_a[2],depth=_a[3];var _b=__read(dy.shape,3),yHeight=_b[1],yWidth=_b[2];var output=new Float32Array(batch*xHeight*xWidth*depth);var effectiveXSize=[alignCorners&&yHeight>1?xHeight-1:xHeight,alignCorners&&yWidth>1?xWidth-1:xWidth];var effectiveYSize=[alignCorners&&yHeight>1?yHeight-1:yHeight,alignCorners&&yWidth>1?yWidth-1:yWidth];var heightScale=effectiveXSize[0]/effectiveYSize[0];var widthScale=effectiveXSize[1]/effectiveYSize[1];var dyValues=backend.data.get(dy.dataId).values;var offset=0;for(var b=0;b<batch;b++){var bOffset=b*imagesStrides[0];for(var r=0;r<yHeight;r++){var dxR=r*heightScale;var topDxRIndex=Math.floor(dxR);var bottomDxRIndex=Math.min(Math.ceil(dxR),xHeight-1);var topDxROffset=bOffset+topDxRIndex*imagesStrides[1];var bottomDxROffset=bOffset+bottomDxRIndex*imagesStrides[1];var dxRLerp=dxR-topDxRIndex;var inverseDxRLerp=1-dxRLerp;for(var c=0;c<yWidth;c++){var dxC=c*widthScale;var leftDxCIndex=Math.floor(dxC);var rightDxCIndex=Math.min(Math.ceil(dxC),xWidth-1);var dxCLerp=dxC-leftDxCIndex;var inverseDxCLerp=1-dxCLerp;var topLeftRCOffset=topDxROffset+leftDxCIndex*imagesStrides[2];var topRightRCOffset=topDxROffset+rightDxCIndex*imagesStrides[2];var bottomLeftRCOffset=bottomDxROffset+leftDxCIndex*imagesStrides[2];var bottomRightRCOffset=bottomDxROffset+rightDxCIndex*imagesStrides[2];var inverseDxRLerpTimesInverseDxCLerp=inverseDxRLerp*inverseDxCLerp;var inverseDxRLerpTimesDxCLerp=inverseDxRLerp*dxCLerp;var dxRLerpTimesInverseDxCLerp=dxRLerp*inverseDxCLerp;var dxRLerpTimesDxCLerp=dxRLerp*dxCLerp;for(var d=0;d<depth;d++){var dyVal=dyValues[offset++];output[topLeftRCOffset+d]+=dyVal*inverseDxRLerpTimesInverseDxCLerp;output[topRightRCOffset+d]+=dyVal*inverseDxRLerpTimesDxCLerp;output[bottomLeftRCOffset+d]+=dyVal*dxRLerpTimesInverseDxCLerp;output[bottomRightRCOffset+d]+=dyVal*dxRLerpTimesDxCLerp}}}}return backend.makeTensorInfo([batch,xWidth,xHeight,depth],"float32",output)}var resizeBilinearGradConfig={kernelName:tfjsCore.ResizeBilinearGrad,backendName:"cpu",kernelFunc:resizeBilinearGrad};function resizeNearestNeighbor(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var images=inputs.images;var alignCorners=attrs.alignCorners,halfPixelCenters=attrs.halfPixelCenters,size=attrs.size;assertNotComplex(images,"resizeNearestNeighbor");var imagesStrides=tfjsCore.util.computeStrides(images.shape);var _a=__read(size,2),newHeight=_a[0],newWidth=_a[1];var _b=__read(images.shape,4),batch=_b[0],oldHeight=_b[1],oldWidth=_b[2],numChannels=_b[3];var xValues=backend.data.get(images.dataId).values;var output=new Float32Array(batch*newHeight*newWidth*numChannels);var effectiveInputSize=[alignCorners&&newHeight>1?oldHeight-1:oldHeight,alignCorners&&newWidth>1?oldWidth-1:oldWidth];var effectiveOutputSize=[alignCorners&&newHeight>1?newHeight-1:newHeight,alignCorners&&newWidth>1?newWidth-1:newWidth];var effectiveRowSizeRatio=effectiveInputSize[0]/effectiveOutputSize[0];var effectiveColSizeRatio=effectiveInputSize[1]/effectiveOutputSize[1];var outputOffset=0;for(var b=0;b<batch;b++){var batchOffset=b*imagesStrides[0];for(var r=0;r<newHeight;r++){var sourceFracRow=halfPixelCenters?effectiveRowSizeRatio*(r+.5):effectiveRowSizeRatio*r;var sourceNearestRow=Math.min(oldHeight-1,alignCorners?Math.round(sourceFracRow):Math.floor(sourceFracRow));if(halfPixelCenters){sourceNearestRow=Math.max(0,sourceNearestRow)}var rowOffset=batchOffset+sourceNearestRow*imagesStrides[1];for(var c=0;c<newWidth;c++){var sourceFracCol=halfPixelCenters?effectiveColSizeRatio*(c+.5):effectiveColSizeRatio*c;var sourceNearestCol=Math.min(oldWidth-1,alignCorners?Math.round(sourceFracCol):Math.floor(sourceFracCol));if(halfPixelCenters){sourceNearestCol=Math.max(0,sourceNearestCol)}var colOffset=rowOffset+sourceNearestCol*imagesStrides[2];for(var d=0;d<numChannels;d++){var newVal=xValues[colOffset+d];output[outputOffset++]=newVal}}}}return backend.makeTensorInfo([batch,newHeight,newWidth,numChannels],images.dtype,output)}var resizeNearestNeighborConfig={kernelName:tfjsCore.ResizeNearestNeighbor,backendName:"cpu",kernelFunc:resizeNearestNeighbor};function resizeNearestNeighborGrad(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var images=inputs.images,dy=inputs.dy;var alignCorners=attrs.alignCorners;assertNotComplex([dy,images],"resizeNearestNeighborGrad");var imagesStrides=tfjsCore.util.computeStrides(images.shape);var dyStrides=tfjsCore.util.computeStrides(dy.shape);var _a=__read(images.shape,4),batch=_a[0],xHeight=_a[1],xWidth=_a[2],depth=_a[3];var _b=__read(dy.shape,3),yHeight=_b[1],yWidth=_b[2];var output=new Float32Array(batch*xHeight*xWidth*depth);var dyValues=backend.data.get(dy.dataId).values;var effectiveXSize=[alignCorners&&yHeight>1?xHeight-1:xHeight,alignCorners&&yWidth>1?xWidth-1:xWidth];var effectiveYSize=[alignCorners&&yHeight>1?yHeight-1:yHeight,alignCorners&&yWidth>1?yWidth-1:yWidth];var heightScale=effectiveXSize[0]/effectiveYSize[0];var widthScale=effectiveXSize[1]/effectiveYSize[1];var invHeightScale=1/heightScale;var invWidthScale=1/widthScale;var winHeight=Math.ceil(invHeightScale)*2+2;var winWidth=Math.ceil(invWidthScale)*2+2;for(var b=0;b<batch;b++){var batchOffset=b*imagesStrides[0];for(var r=0;r<xHeight;r++){var rowOffset=batchOffset+r*imagesStrides[1];var startRLerp=Math.floor(r*invHeightScale);var startDyR=Math.floor(startRLerp-winHeight/2);for(var c=0;c<xWidth;c++){var colOffset=rowOffset+c*imagesStrides[2];var startCLerp=Math.floor(c*invWidthScale);var startDyC=Math.floor(startCLerp-winWidth/2);for(var d=0;d<depth;d++){var accum=0;for(var dyRIndex=0;dyRIndex<winHeight;dyRIndex++){var dyR=dyRIndex+startDyR;if(dyR<0||dyR>=yHeight){continue}var dyROffset=batchOffset+dyR*dyStrides[1];var sourceFracRow=dyR*heightScale;var sourceNearestRow=Math.min(xHeight-1,alignCorners?Math.round(sourceFracRow):Math.floor(sourceFracRow));if(r!==sourceNearestRow){continue}for(var dyCIndex=0;dyCIndex<winWidth;dyCIndex++){var dyC=dyCIndex+startDyC;if(dyC<0||dyC>=yWidth){continue}var dyCOffset=dyROffset+dyC*dyStrides[2];var sourceFracCol=dyC*widthScale;var sourceNearestCol=Math.min(xWidth-1,alignCorners?Math.round(sourceFracCol):Math.floor(sourceFracCol));if(c===sourceNearestCol){accum+=dyValues[dyCOffset+d]}}}output[colOffset+d]=accum}}}}return backend.makeTensorInfo(images.shape,images.dtype,output)}var resizeNearestNeighborGradConfig={kernelName:tfjsCore.ResizeNearestNeighborGrad,backendName:"cpu",kernelFunc:resizeNearestNeighborGrad};function reverse(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var dims=attrs.dims;assertNotComplex(x,"reverse");var xRank=x.shape.length;var $dims=tfjsCore.util.parseAxisParam(dims,x.shape);if(xRank===0){return identity({inputs:{x:x},backend:backend})}var outBuf=new tfjsCore.TensorBuffer(x.shape,x.dtype);var xBuf=backend.bufferSync(x);var _loop_1=function(i){var outLoc=outBuf.indexToLoc(i);var inLoc=outLoc.slice();$dims.forEach(function(d){return inLoc[d]=x.shape[d]-1-inLoc[d]});outBuf.set.apply(outBuf,__spread([xBuf.get.apply(xBuf,__spread(inLoc))],outLoc))};for(var i=0;i<outBuf.size;i++){_loop_1(i)}return backend.makeTensorInfo(outBuf.shape,outBuf.dtype,outBuf.values)}var reverseConfig={kernelName:tfjsCore.Reverse,backendName:"cpu",kernelFunc:reverse};var rotateWithOffsetConfig={kernelName:tfjsCore.RotateWithOffset,backendName:"cpu",kernelFunc:function(_a){var inputs=_a.inputs,attrs=_a.attrs,backend=_a.backend;var image=inputs.image;var radians=attrs.radians,fillValue=attrs.fillValue,center=attrs.center;var cpuBackend=backend;var output=tfjsCore.util.getTypedArrayFromDType(image.dtype,tfjsCore.util.sizeFromShape(image.shape));var _b=__read(image.shape,4),batch=_b[0],imageHeight=_b[1],imageWidth=_b[2],numChannels=_b[3];var _c=__read(tfjsCore.backend_util.getImageCenter(center,imageHeight,imageWidth),2),centerX=_c[0],centerY=_c[1];var fullOpacityValue=255;var sinFactor=Math.sin(radians);var cosFactor=Math.cos(radians);var imageVals=cpuBackend.data.get(image.dataId).values;for(var batchIdx=0;batchIdx<batch;batchIdx++){var batchOffset=batchIdx*imageWidth*imageHeight*numChannels;for(var row=0;row<imageHeight;row++){var rowOffset=row*(imageWidth*numChannels);for(var col=0;col<imageWidth;col++){var colOffset=col*numChannels;for(var channel=0;channel<numChannels;channel++){var coords=[batch,row,col,channel];var x=coords[2];var y=coords[1];var coordX=(x-centerX)*cosFactor-(y-centerY)*sinFactor;var coordY=(x-centerX)*sinFactor+(y-centerY)*cosFactor;coordX=Math.round(coordX+centerX);coordY=Math.round(coordY+centerY);var outputValue=fillValue;if(typeof fillValue!=="number"){if(channel===3){outputValue=fullOpacityValue}else{outputValue=fillValue[channel]}}if(coordX>=0&&coordX<imageWidth&&coordY>=0&&coordY<imageHeight){var rotatedRowOffset=coordY*(imageWidth*numChannels);var rotatedColOffset=coordX*numChannels;var imageIdx=batchOffset+rotatedRowOffset+rotatedColOffset+channel;outputValue=imageVals[imageIdx]}var outIdx=batchOffset+rowOffset+colOffset+channel;output[outIdx]=outputValue}}}}var dataId=cpuBackend.write(output,image.shape,image.dtype);return{dataId:dataId,shape:image.shape,dtype:image.dtype}}};var round=unaryKernelFunc(tfjsCore.Round,function(xi){var base=Math.floor(xi);if(xi-base<.5){return Math.floor(xi)}else if(xi-base>.5){return Math.ceil(xi)}else{if(base%2===0){return base}else{return base+1}}});var roundConfig={kernelName:tfjsCore.Round,backendName:"cpu",kernelFunc:round};function scatterImpl(indices,updates,shape,outputSize,sliceSize,numUpdates,sliceRank,strides,defaultValue,sumDupeIndices){var flattenShape=[outputSize/sliceSize,sliceSize];var indicesData=indices.values;var updatesData=updates.values;if(outputSize===0){return tfjsCore.buffer(shape,updates.dtype)}var outBuf=tfjsCore.buffer(flattenShape,updates.dtype);outBuf.values.fill(defaultValue);for(var i=0;i<numUpdates;i++){var index=[];var flattenIndex=0;for(var j=0;j<sliceRank;j++){var dim=indicesData[i*sliceRank+j];index.push(dim);flattenIndex+=dim*strides[j]}if(flattenIndex<0||flattenIndex>=outputSize/sliceSize){throw new Error("Invalid indices: "+index+" does not index into "+shape)}for(var k=0;k<sliceSize;k++){if(sumDupeIndices){outBuf.values[flattenIndex*sliceSize+k]+=updatesData[i*sliceSize+k]}else{outBuf.values[flattenIndex*sliceSize+k]=updates.rank===0?updatesData[0]:updatesData[i*sliceSize+k]}}}return outBuf}function scatterNd(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var indices=inputs.indices,updates=inputs.updates;var shape=attrs.shape;var _a=tfjsCore.backend_util.calculateShapes(updates,indices,shape),sliceRank=_a.sliceRank,numUpdates=_a.numUpdates,sliceSize=_a.sliceSize,strides=_a.strides,outputSize=_a.outputSize;var sumDupeIndices=true;var indicesBuf=backend.bufferSync(indices);var updatesBuf=backend.bufferSync(updates);var outBuf=scatterImpl(indicesBuf,updatesBuf,shape,outputSize,sliceSize,numUpdates,sliceRank,strides,0,sumDupeIndices);return backend.makeTensorInfo(shape,outBuf.dtype,outBuf.values)}var scatterNdConfig={kernelName:tfjsCore.ScatterNd,backendName:"cpu",kernelFunc:scatterNd};function select(args){var inputs=args.inputs,backend=args.backend;var condition=inputs.condition,t=inputs.t,e=inputs.e;assertNotComplex([condition,t,e],"select");var conditionRank=condition.shape.length;var values=backend.data.get(condition.dataId).values;var tValues=backend.data.get(t.dataId).values;var eValues=backend.data.get(e.dataId).values;var resultDtype=tfjsCore.upcastType(t.dtype,e.dtype);var newValues=tfjsCore.util.makeZerosTypedArray(tfjsCore.util.sizeFromShape(t.shape),resultDtype);var index=0;var offset=conditionRank===0||conditionRank>1||t.shape.length===1?1:tfjsCore.util.sizeFromShape(t.shape.slice(1));for(var i=0;i<values.length;i++){for(var j=0;j<offset;j++){if(values[i]===1){newValues[index++]=tValues[i]}else{newValues[index++]=eValues[i]}}}return backend.makeTensorInfo(t.shape,resultDtype,newValues)}var selectConfig={kernelName:tfjsCore.Select,backendName:"cpu",kernelFunc:select};var scaleAlpha=tfjsCore.backend_util.SELU_SCALEALPHA;var scale=tfjsCore.backend_util.SELU_SCALE;var selu=unaryKernelFunc(tfjsCore.Selu,function(xi){if(xi>=0){return scale*xi}else{return scaleAlpha*(Math.exp(xi)-1)}});var seluConfig={kernelName:tfjsCore.Selu,backendName:"cpu",kernelFunc:selu};var sign=unaryKernelFunc(tfjsCore.Sign,function(xi){if(xi<0){return-1}else if(xi>0){return 1}else{return 0}});var signConfig={kernelName:tfjsCore.Sign,backendName:"cpu",kernelFunc:sign};var sin=unaryKernelFunc(tfjsCore.Sin,function(xi){return Math.sin(xi)});var sinConfig={kernelName:tfjsCore.Sin,backendName:"cpu",kernelFunc:sin};var sinh=unaryKernelFunc(tfjsCore.Sinh,function(xi){return Math.sinh(xi)});var sinhConfig={kernelName:tfjsCore.Sinh,backendName:"cpu",kernelFunc:sinh};var epsilon=1.1920928955078125e-7;var threshold=Math.log(epsilon)+2;var softplus=unaryKernelFunc(tfjsCore.Softplus,function(xi){var tooLarge=xi>-threshold;var tooSmall=xi<threshold;var expX=Math.exp(xi);var result;if(tooSmall){result=expX}else if(tooLarge){result=xi}else{result=Math.log(1+expX)}return result});var softplusConfig={kernelName:tfjsCore.Softplus,backendName:"cpu",kernelFunc:softplus};function spaceToBatchND(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var blockShape=attrs.blockShape,paddings=attrs.paddings;assertNotComplex([x],"spaceToBatchND");var prod=tfjsCore.util.sizeFromShape(blockShape);var completePaddings=[[0,0]];completePaddings.push.apply(completePaddings,__spread(paddings));for(var i=1+blockShape.length;i<x.shape.length;++i){completePaddings.push([0,0])}var paddedX=padV2Config.kernelFunc({inputs:{x:x},backend:backend,attrs:{paddings:completePaddings,constantValue:0}});var reshapedPaddedShape=tfjsCore.backend_util.getReshaped(paddedX.shape,blockShape,prod,false);var permutedReshapedPaddedPermutation=tfjsCore.backend_util.getPermuted(reshapedPaddedShape.length,blockShape.length,false);var flattenShape=tfjsCore.backend_util.getReshapedPermuted(paddedX.shape,blockShape,prod,false);var reshapeInputs={x:paddedX};var reshapeAttrs={shape:reshapedPaddedShape};var paddedXReshaped=reshape({inputs:reshapeInputs,backend:backend,attrs:reshapeAttrs});var transposeInputs={x:paddedXReshaped};var transposeAttrs={perm:permutedReshapedPaddedPermutation};var paddedXT=transpose({inputs:transposeInputs,backend:backend,attrs:transposeAttrs});var resultReshapeInputs={x:paddedXT};var resultReshapeAttrs={shape:flattenShape};var result=reshape({inputs:resultReshapeInputs,backend:backend,attrs:resultReshapeAttrs});backend.disposeIntermediateTensorInfo(paddedX);backend.disposeIntermediateTensorInfo(paddedXReshaped);backend.disposeIntermediateTensorInfo(paddedXT);return result}var spaceToBatchNDConfig={kernelName:tfjsCore.SpaceToBatchND,backendName:"cpu",kernelFunc:spaceToBatchND};function sparseFillEmptyRows(args){var inputs=args.inputs,backend=args.backend;var indices=inputs.indices,values=inputs.values,denseShape=inputs.denseShape,defaultValue=inputs.defaultValue;if(denseShape.shape.length!==1){throw new Error("Dense shape must be a vector, saw:\n        "+denseShape.shape)}if(indices.shape.length!==2){throw new Error("Indices must be a matrix, saw:\n        "+indices.shape)}if(values.shape.length!==1){throw new Error("Values must be a vector, saw:\n        "+values.shape)}if(defaultValue.shape.length!==0){throw new Error("Default value must be a scalar, saw:\n        "+defaultValue.shape)}var $indices=backend.data.get(indices.dataId).values;var $values=backend.data.get(values.dataId).values;var $denseShape=backend.data.get(denseShape.dataId).values;var $defaultValue=backend.data.get(defaultValue.dataId).values[0];var _a=__read(sparseFillEmptyRowsImpl($indices,indices.shape,indices.dtype,$values,values.dtype,$denseShape,$defaultValue),5),outputIndices=_a[0],outputIndicesShape=_a[1],outputValues=_a[2],emptyRowIndicator=_a[3],reverseIndexMap=_a[4];return[backend.makeTensorInfo(outputIndicesShape,indices.dtype,outputIndices),backend.makeTensorInfo([outputIndicesShape[0]],values.dtype,outputValues),backend.makeTensorInfo([emptyRowIndicator.length],"bool",new Uint8Array(emptyRowIndicator.map(function(value){return Number(value)}))),backend.makeTensorInfo([reverseIndexMap.length],indices.dtype,new Int32Array(reverseIndexMap))]}var sparseFillEmptyRowsConfig={kernelName:tfjsCore.SparseFillEmptyRows,backendName:"cpu",kernelFunc:sparseFillEmptyRows};function sparseReshape(args){var inputs=args.inputs,backend=args.backend;var inputIndices=inputs.inputIndices,inputShape=inputs.inputShape,newShape=inputs.newShape;if(inputIndices.shape.length!==2){throw new Error("Input indices should be a matrix but received shape\n        "+inputIndices.shape)}if(inputShape.shape.length!==1){throw new Error("Input shape should be a vector but received shape\n        "+inputShape.shape)}if(newShape.shape.length!==1){throw new Error("Target shape should be a vector but received shape "+newShape.shape)}var $inputShape=Array.from(backend.data.get(inputShape.dataId).values);var $inputIndices=backend.data.get(inputIndices.dataId).values;var targetShape=Array.from(backend.data.get(newShape.dataId).values);var _a=__read(sparseReshapeImpl($inputIndices,inputIndices.shape,inputIndices.dtype,$inputShape,targetShape),3),newIndices=_a[0],indicesShape=_a[1],outputShape=_a[2];return[backend.makeTensorInfo(indicesShape,inputIndices.dtype,newIndices),backend.makeTensorInfo([outputShape.length],newShape.dtype,new Int32Array(outputShape))]}var sparseReshapeConfig={kernelName:tfjsCore.SparseReshape,backendName:"cpu",kernelFunc:sparseReshape};function sparseSegmentMean(args){var inputs=args.inputs,backend=args.backend;var data=inputs.data,indices=inputs.indices,segmentIds=inputs.segmentIds;if(data.shape.length<1){throw new Error("Data should be at least 1 dimensional but received scalar")}if(indices.shape.length!==1){throw new Error("Indices should be a vector but received shape\n          "+indices.shape)}if(segmentIds.shape.length!==1){throw new Error("Segment ids should be a vector but received shape\n          "+segmentIds.shape)}var $data=backend.data.get(data.dataId).values;var $indices=backend.data.get(indices.dataId).values;var $segmentIds=backend.data.get(segmentIds.dataId).values;var _a=__read(sparseSegmentReductionImpl($data,data.shape,data.dtype,$indices,$segmentIds,true),2),outputData=_a[0],outputDataShape=_a[1];return backend.makeTensorInfo(outputDataShape,data.dtype,outputData)}var sparseSegmentMeanConfig={kernelName:tfjsCore.SparseSegmentMean,backendName:"cpu",kernelFunc:sparseSegmentMean};function sparseSegmentSum(args){var inputs=args.inputs,backend=args.backend;var data=inputs.data,indices=inputs.indices,segmentIds=inputs.segmentIds;if(data.shape.length<1){throw new Error("Data should be at least 1 dimensional but received scalar")}if(indices.shape.length!==1){throw new Error("Indices should be a vector but received shape\n         "+indices.shape)}if(segmentIds.shape.length!==1){throw new Error("Segment ids should be a vector but received shape\n         "+segmentIds.shape)}var $data=backend.data.get(data.dataId).values;var $indices=backend.data.get(indices.dataId).values;var $segmentIds=backend.data.get(segmentIds.dataId).values;var _a=__read(sparseSegmentReductionImpl($data,data.shape,data.dtype,$indices,$segmentIds),2),outputData=_a[0],outputDataShape=_a[1];return backend.makeTensorInfo(outputDataShape,data.dtype,outputData)}var sparseSegmentSumConfig={kernelName:tfjsCore.SparseSegmentSum,backendName:"cpu",kernelFunc:sparseSegmentSum};function sparseToDense(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var sparseIndices=inputs.sparseIndices,sparseValues=inputs.sparseValues,defaultValue=inputs.defaultValue;var outputShape=attrs.outputShape;var _a=tfjsCore.backend_util.calculateShapes(sparseValues,sparseIndices,outputShape),sliceRank=_a.sliceRank,numUpdates=_a.numUpdates,sliceSize=_a.sliceSize,strides=_a.strides,outputSize=_a.outputSize;var sumDupeIndices=false;var indicesBuf=backend.bufferSync(sparseIndices);var updatesBuf=backend.bufferSync(sparseValues);var $defaultValue=backend.data.get(defaultValue.dataId).values[0];var outBuf=scatterImpl(indicesBuf,updatesBuf,outputShape,outputSize,sliceSize,numUpdates,sliceRank,strides,$defaultValue,sumDupeIndices);return backend.makeTensorInfo(outputShape,outBuf.dtype,outBuf.values)}var sparseToDenseConfig={kernelName:tfjsCore.SparseToDense,backendName:"cpu",kernelFunc:sparseToDense};function splitV(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var numOrSizeSplits=attrs.numOrSizeSplits,axis=attrs.axis;var $axis=tfjsCore.util.parseAxisParam(axis,x.shape)[0];var splitSizes=tfjsCore.backend_util.prepareSplitSize(x,numOrSizeSplits,$axis);var begin=new Array(x.shape.length).fill(0);var size=x.shape.slice();return splitSizes.map(function(s){var sliceSize=__spread(size);sliceSize[$axis]=s;var sliceT=slice({inputs:{x:x},backend:backend,attrs:{begin:begin,size:sliceSize}});begin[$axis]+=s;return sliceT})}var splitVConfig={kernelName:tfjsCore.SplitV,backendName:"cpu",kernelFunc:splitV};var squareConfig={kernelName:tfjsCore.Square,backendName:"cpu",kernelFunc:function(_a){var inputs=_a.inputs,backend=_a.backend;var x=inputs.x;var cpuBackend=backend;assertNotComplex(x,"square");var values=cpuBackend.data.get(x.dataId).values;var newValues=new Float32Array(values.length);for(var i=0;i<values.length;++i){var value=values[i];newValues[i]=value*value}var dataId=cpuBackend.write(newValues,x.shape,x.dtype);return{dataId:dataId,shape:x.shape,dtype:x.dtype}}};var step=unaryKernelFunc(tfjsCore.Step,function(xi,attrs){var stepAttrs=attrs;if(isNaN(xi)){return NaN}else{return xi>0?1:stepAttrs.alpha}});var stepConfig={kernelName:tfjsCore.Step,backendName:"cpu",kernelFunc:step};function stridedSlice(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var begin=attrs.begin,end=attrs.end,strides=attrs.strides,beginMask=attrs.beginMask,endMask=attrs.endMask,ellipsisMask=attrs.ellipsisMask,newAxisMask=attrs.newAxisMask,shrinkAxisMask=attrs.shrinkAxisMask;assertNotComplex(x,"stridedSlice");var _a=tfjsCore.slice_util.sliceInfo(x.shape,begin,end,strides,beginMask,endMask,ellipsisMask,newAxisMask,shrinkAxisMask),nonStrided=_a.nonStrided,$begin=_a.$begin,$strides=_a.$strides,size=_a.size,newShape=_a.newShape,outShape=_a.outShape;var $x=reshape({inputs:{x:x},backend:backend,attrs:{shape:newShape}});var result;if(nonStrided){var sliced=slice({inputs:{x:$x},backend:backend,attrs:{begin:$begin,size:size}});result=reshape({inputs:{x:sliced},backend:backend,attrs:{shape:outShape}});backend.disposeIntermediateTensorInfo(sliced)}else if(outShape.some(function(axis){return axis===0})){result=backend.makeTensorInfo(outShape,x.dtype,[])}else{var xBuf=backend.bufferSync($x);var outBuf=stridedSliceImpl(outShape,xBuf,$strides,$begin);result=backend.makeTensorInfo(outBuf.shape,outBuf.dtype,outBuf.values)}var resultReshaped=reshape({inputs:{x:result},backend:backend,attrs:{shape:outShape}});backend.disposeIntermediateTensorInfo($x);backend.disposeIntermediateTensorInfo(result);return resultReshaped}var stridedSliceConfig={kernelName:tfjsCore.StridedSlice,backendName:"cpu",kernelFunc:stridedSlice};function stringNGrams(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var separator=attrs.separator,nGramWidths=attrs.nGramWidths,leftPad=attrs.leftPad,rightPad=attrs.rightPad,padWidth=attrs.padWidth,preserveShortSequences=attrs.preserveShortSequences;var data=inputs.data,dataSplits=inputs.dataSplits;var $data=backend.data.get(data.dataId).values;var $dataSplits=backend.data.get(dataSplits.dataId).values;var _a=__read(stringNGramsImpl($data,$dataSplits,separator,nGramWidths,leftPad,rightPad,padWidth,preserveShortSequences),2),nGrams=_a[0],nGramsSplits=_a[1];return[backend.makeTensorInfo([nGrams.length],"string",nGrams),backend.makeTensorInfo(dataSplits.shape,"int32",nGramsSplits)]}var stringNGramsConfig={kernelName:tfjsCore.StringNGrams,backendName:"cpu",kernelFunc:stringNGrams};function stringSplit(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var skipEmpty=attrs.skipEmpty;var input=inputs.input,delimiter=inputs.delimiter;if(input.dtype!=="string"){throw new Error("Input must be of datatype string")}if(input.shape.length!==1){throw new Error("Input must be a vector, got shape: "+input.shape)}if(delimiter.shape.length!==0){throw new Error("Delimiter must be a scalar, got shape: "+delimiter.shape)}var $input=backend.data.get(input.dataId).values;var $delimiter=backend.data.get(delimiter.dataId).values[0];var _a=__read(stringSplitImpl($input,$delimiter,skipEmpty),3),indices=_a[0],values=_a[1],shape=_a[2];var outputSize=values.length;return[backend.makeTensorInfo([outputSize,2],"int32",indices),backend.makeTensorInfo([outputSize],"string",values),backend.makeTensorInfo([2],"int32",new Int32Array(shape))]}var stringSplitConfig={kernelName:tfjsCore.StringSplit,backendName:"cpu",kernelFunc:stringSplit};function stringToHashBucketFast(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var numBuckets=attrs.numBuckets;var input=inputs.input;if(input.dtype!=="string"){throw new Error("Input must be of datatype string")}if(numBuckets<=0){throw new Error("Number of buckets must be at least 1")}var $input=backend.data.get(input.dataId).values;var output=stringToHashBucketFastImpl($input,numBuckets);return backend.makeTensorInfo(input.shape,"int32",output)}var stringToHashBucketFastConfig={kernelName:tfjsCore.StringToHashBucketFast,backendName:"cpu",kernelFunc:stringToHashBucketFast};var tan=unaryKernelFunc(tfjsCore.Tan,function(xi){return Math.tan(xi)});var tanConfig={kernelName:tfjsCore.Tan,backendName:"cpu",kernelFunc:tan};var tanh=unaryKernelFunc(tfjsCore.Tanh,function(xi){return Math.tanh(xi)});var tanhConfig={kernelName:tfjsCore.Tanh,backendName:"cpu",kernelFunc:tanh};function tile(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var reps=attrs.reps;assertNotComplex(x,"tile");var outBuf=tileImpl(backend.bufferSync(x),reps);return backend.makeTensorInfo(outBuf.shape,outBuf.dtype,outBuf.values)}var tileConfig={kernelName:tfjsCore.Tile,backendName:"cpu",kernelFunc:tile};function topK(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var k=attrs.k,sorted=attrs.sorted;assertNotComplex(x,"topk");var xVals=backend.data.get(x.dataId).values;var _a=__read(topKImpl(xVals,x.shape,x.dtype,k,sorted),2),allTopKVals=_a[0],allTopKIndices=_a[1];return[backend.makeTensorInfo(allTopKVals.shape,allTopKVals.dtype,allTopKVals.values),backend.makeTensorInfo(allTopKIndices.shape,allTopKIndices.dtype,allTopKIndices.values)]}var topKConfig={kernelName:tfjsCore.TopK,backendName:"cpu",kernelFunc:topK};function transform(args){var inputs=args.inputs,attrs=args.attrs,backend=args.backend;var image=inputs.image,transforms=inputs.transforms;var interpolation=attrs.interpolation,fillMode=attrs.fillMode,fillValue=attrs.fillValue,outputShape=attrs.outputShape;var _a=__read(image.shape,4),batch=_a[0],imageHeight=_a[1],imageWidth=_a[2],numChannels=_a[3];var _b=__read(outputShape!=null?outputShape:[imageHeight,imageWidth],2),outHeight=_b[0],outWidth=_b[1];var outShape=[batch,outHeight,outWidth,numChannels];var strides=tfjsCore.util.computeStrides(image.shape);var batchStride=strides[0];var rowStride=strides[1];var colStride=strides[2];var outVals=tfjsCore.util.getTypedArrayFromDType(image.dtype,tfjsCore.util.sizeFromShape(outShape));outVals.fill(fillValue);var imageVals=backend.data.get(image.dataId).values;var transformVals=backend.data.get(transforms.dataId).values;for(var b=0;b<batch;++b){var transform_1=transforms.shape[0]===1?transformVals:transformVals.subarray(b*8,b*8+8);for(var outY=0;outY<outHeight;++outY){for(var outX=0;outX<outWidth;++outX){for(var channel=0;channel<numChannels;++channel){var val=void 0;var projection=transform_1[6]*outX+transform_1[7]*outY+1;if(projection===0){continue}var inX=(transform_1[0]*outX+transform_1[1]*outY+transform_1[2])/projection;var inY=(transform_1[3]*outX+transform_1[4]*outY+transform_1[5])/projection;var x=mapCoord(inX,imageWidth,fillMode);var y=mapCoord(inY,imageHeight,fillMode);switch(interpolation){case"nearest":val=nearestInterpolation(imageVals,imageHeight,imageWidth,batchStride,rowStride,colStride,b,y,x,channel,fillValue);break;case"bilinear":val=bilinearInterpolation(imageVals,imageHeight,imageWidth,batchStride,rowStride,colStride,b,y,x,channel,fillValue);break;default:throw new Error("Error in Transform: Expect 'nearest' or "+("'bilinear', but got "+interpolation))}var ind=b*batchStride+outY*rowStride+outX*colStride+channel;outVals[ind]=val}}}return backend.makeTensorInfo(outShape,image.dtype,outVals)}var dataId=backend.write(outVals,outShape,image.dtype);return{dataId:dataId,shape:image.shape,dtype:image.dtype}}var transformConfig={kernelName:tfjsCore.Transform,backendName:"cpu",kernelFunc:transform};function mapCoord(outCoord,len,mode){switch(mode){case"reflect":return mapCoordReflect(outCoord,len);case"wrap":return mapCoordWrap(outCoord,len);case"nearest":return mapCoordNearest(outCoord,len);case"constant":default:return mapCoordConstant(outCoord)}}function mapCoordReflect(outCoord,len){var inCoord=outCoord;if(inCoord<0){if(len<=1){inCoord=0}else{var sz2=2*len;if(inCoord<sz2){inCoord=sz2*Math.trunc(-inCoord/sz2)+inCoord}inCoord=inCoord<-len?inCoord+sz2:-inCoord-1}}else if(inCoord>len-1){if(len<=1){inCoord=0}else{var sz2=2*len;inCoord-=sz2*Math.trunc(inCoord/sz2);if(inCoord>=len){inCoord=sz2-inCoord-1}}}return tfjsCore.util.clamp(0,inCoord,len-1)}function mapCoordWrap(outCoord,len){var inCoord=outCoord;if(inCoord<0){if(len<=1){inCoord=0}else{var sz=len-1;inCoord+=len*(Math.trunc(-inCoord/sz)+1)}}else if(inCoord>len-1){if(len<=1){inCoord=0}else{var sz=len-1;inCoord-=len*Math.trunc(inCoord/sz)}}return tfjsCore.util.clamp(0,inCoord,len-1)}function mapCoordConstant(outCoord,len){return outCoord}function mapCoordNearest(outCoord,len){return tfjsCore.util.clamp(0,outCoord,len-1)}function readWithFillValue(imageVals,imageHeight,imageWidth,batchStride,rowStride,colStride,batch,y,x,channel,fillValue){var ind=batch*batchStride+y*rowStride+x*colStride+channel;if(0<=y&&y<imageHeight&&0<=x&&x<imageWidth){return imageVals[ind]}else{return fillValue}}function nearestInterpolation(imageVals,imageHeight,imageWidth,batchStride,rowStride,colStride,batch,y,x,channel,fillValue){var $y=Math.round(y);var $x=Math.round(x);return readWithFillValue(imageVals,imageHeight,imageWidth,batchStride,rowStride,colStride,batch,$y,$x,channel,fillValue)}function bilinearInterpolation(imageVals,imageHeight,imageWidth,batchStride,rowStride,colStride,batch,y,x,channel,fillValue){var yFloor=Math.floor(y);var xFloor=Math.floor(x);var yCeil=yFloor+1;var xCeil=xFloor+1;var valueYFloor=(xCeil-x)*readWithFillValue(imageVals,imageHeight,imageWidth,batchStride,rowStride,colStride,batch,yFloor,xFloor,channel,fillValue)+(x-xFloor)*readWithFillValue(imageVals,imageHeight,imageWidth,batchStride,rowStride,colStride,batch,yFloor,xCeil,channel,fillValue);var valueYCeil=(xCeil-x)*readWithFillValue(imageVals,imageHeight,imageWidth,batchStride,rowStride,colStride,batch,yCeil,xFloor,channel,fillValue)+(x-xFloor)*readWithFillValue(imageVals,imageHeight,imageWidth,batchStride,rowStride,colStride,batch,yCeil,xCeil,channel,fillValue);return(yCeil-y)*valueYFloor+(y-yFloor)*valueYCeil}function unique(args){var inputs=args.inputs,attrs=args.attrs,backend=args.backend;var axis=attrs.axis;var x=inputs.x;assertNotComplex(x,"unique");var values=backend.data.get(x.dataId).values;var _a=uniqueImpl(values,axis,x.shape,x.dtype),outputValues=_a.outputValues,outputShape=_a.outputShape,indices=_a.indices;return[backend.makeTensorInfo(outputShape,x.dtype,outputValues),backend.makeTensorInfo([indices.length],"int32",indices)]}var uniqueConfig={kernelName:tfjsCore.Unique,backendName:"cpu",kernelFunc:unique};function unpack(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var value=inputs.value;var axis=attrs.axis;if(axis<0){axis+=value.shape.length}var valueRank=value.shape.length;var num=value.shape[axis];var outShape=new Array(valueRank-1);var outIndex=0;for(var i=0;i<valueRank;i++){if(i!==axis){outShape[outIndex++]=value.shape[i]}}var begin=new Array(valueRank).fill(0);var size=value.shape.slice();size[axis]=1;var res=new Array(num);for(var i=0;i<res.length;i++){begin[axis]=i;var tempRes=slice({inputs:{x:value},backend:backend,attrs:{begin:begin,size:size}});res[i]=reshape({inputs:{x:tempRes},backend:backend,attrs:{shape:outShape}});backend.disposeIntermediateTensorInfo(tempRes)}return res}var unpackConfig={kernelName:tfjsCore.Unpack,backendName:"cpu",kernelFunc:unpack};function unsortedSegmentSum(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,segmentIds=inputs.segmentIds;var numSegments=attrs.numSegments;assertNotComplex(x,"unsortedSegmentSum");var xRank=x.shape.length;var segmentIdsRank=segmentIds.shape.length;var res=[];var intermediates=[];var numIters=xRank-segmentIdsRank;var $segmentIds=segmentIds;for(var i=0;i<numIters;++i){var expanded=expandDims({inputs:{input:$segmentIds},backend:backend,attrs:{dim:i+1}});$segmentIds=expanded;intermediates.push(expanded)}for(var i=0;i<numSegments;++i){var scalarValue=tfjsCore.util.createScalarValue(i,"int32");var segmentId=backend.makeTensorInfo([],"int32",scalarValue);var mask=equal({inputs:{a:segmentId,b:$segmentIds},backend:backend});var maskCasted=cast({inputs:{x:mask},backend:backend,attrs:{dtype:"float32"}});var mul=multiply({inputs:{a:maskCasted,b:x},backend:backend});var sumTensorInfo=sum({inputs:{x:mul},backend:backend,attrs:{axis:0,keepDims:false}});res.push(sumTensorInfo);intermediates.push(segmentId);intermediates.push(mask);intermediates.push(maskCasted);intermediates.push(mul);intermediates.push(sumTensorInfo)}var result=pack({inputs:res,backend:backend,attrs:{axis:0}});intermediates.forEach(function(t){return backend.disposeIntermediateTensorInfo(t)});return result}var unsortedSegmentSumConfig={kernelName:tfjsCore.UnsortedSegmentSum,backendName:"cpu",kernelFunc:unsortedSegmentSum};var e_1,_a;var kernelConfigs=[_fusedMatMulConfig,absConfig,acosConfig,acoshConfig,addConfig,addNConfig,allConfig,anyConfig,argMaxConfig,argMinConfig,asinConfig,asinhConfig,atanConfig,atan2Config,atanhConfig,avgPoolConfig,avgPool3DConfig,avgPool3DGradConfig,avgPoolGradConfig,batchMatMulConfig,batchNormConfig,batchToSpaceNDConfig,bincountConfig,broadcastArgsConfig,castConfig,ceilConfig,clipConfig,complexConfig,complexAbsConfig,concatConfig,conv2DBackpropFilterConfig,conv2DBackpropInputConfig,conv2DConfig,conv3DBackpropFilterV2Config,conv3DBackpropInputV2Config,conv3DConfig,cosConfig,coshConfig,cropAndResizeConfig,cumsumConfig,denseBincountConfig,depthToSpaceConfig,depthwiseConv2dNativeConfig,depthwiseConv2dNativeBackpropFilterConfig,depthwiseConv2dNativeBackpropInputConfig,diagConfig,dilation2dConfig,dilation2dBackpropInputConfig,dilation2dBackpropFilterConfig,realDivConfig,einsumConfig,eluConfig,eluGradConfig,equalConfig,erfConfig,expConfig,expandDimsConfig,expm1Config,fftConfig,fillConfig,flipLeftRightConfig,floorConfig,floorDivConfig,fusedConv2DConfig,fusedDepthwiseConv2DConfig,gatherNdConfig,gatherV2Config,greaterConfig,greaterEqualConfig,identityConfig,ifftConfig,imagConfig,isFiniteConfig,isInfConfig,isNaNConfig,leakyReluConfig,lessConfig,lessEqualConfig,linSpaceConfig,logConfig,log1pConfig,logicalAndConfig,logicalNotConfig,logicalOrConfig,lRNConfig,lRNGradConfig,maximumConfig,maxPoolConfig,maxPool3DConfig,maxPool3DGradConfig,maxPoolGradConfig,maxPoolWithArgmaxConfig,maxConfig,meanConfig,minConfig,minimumConfig,mirrorPadConfig,modConfig,multinomialConfig,multiplyConfig,negConfig,nonMaxSuppressionV3Config,nonMaxSuppressionV4Config,nonMaxSuppressionV5Config,notEqualConfig,oneHotConfig,onesLikeConfig,packConfig,padV2Config,powConfig,preluConfig,prodConfig,rangeConfig,realConfig,reciprocalConfig,reluConfig,relu6Config,reshapeConfig,resizeBilinearConfig,resizeBilinearGradConfig,resizeNearestNeighborConfig,resizeNearestNeighborGradConfig,reverseConfig,rotateWithOffsetConfig,roundConfig,rsqrtConfig,scatterNdConfig,selectConfig,seluConfig,sigmoidConfig,signConfig,sinConfig,sinhConfig,sliceConfig,softmaxConfig,softplusConfig,spaceToBatchNDConfig,sparseFillEmptyRowsConfig,sparseReshapeConfig,sparseSegmentMeanConfig,sparseSegmentSumConfig,sparseToDenseConfig,splitVConfig,sqrtConfig,squareConfig,squaredDifferenceConfig,stepConfig,stridedSliceConfig,stringNGramsConfig,stringSplitConfig,stringToHashBucketFastConfig,subConfig,sumConfig,tanConfig,tanhConfig,tileConfig,topKConfig,transposeConfig,transformConfig,uniqueConfig,unpackConfig,unsortedSegmentSumConfig,zerosLikeConfig];try{for(var kernelConfigs_1=__values(kernelConfigs),kernelConfigs_1_1=kernelConfigs_1.next();!kernelConfigs_1_1.done;kernelConfigs_1_1=kernelConfigs_1.next()){var kernelConfig=kernelConfigs_1_1.value;tfjsCore.registerKernel(kernelConfig)}}catch(e_1_1){e_1={error:e_1_1}}finally{try{if(kernelConfigs_1_1&&!kernelConfigs_1_1.done&&(_a=kernelConfigs_1.return))_a.call(kernelConfigs_1)}finally{if(e_1)throw e_1.error}}exports.MathBackendCPU=MathBackendCPU;exports.shared=shared;exports.version_cpu=version},{"@tensorflow/tfjs-core":35,seedrandom:41}],33:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var tf=require("@tensorflow/tfjs-core");function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=="default"){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}})}})}n["default"]=e;return n}var tf__namespace=_interopNamespace(tf);var extendStatics=function(d,b){extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b}||function(d,b){for(var p in b)if(b.hasOwnProperty(p))d[p]=b[p]};return extendStatics(d,b)};function __extends(d,b){extendStatics(d,b);function __(){this.constructor=d}d.prototype=b===null?Object.create(b):(__.prototype=b.prototype,new __)}function __awaiter(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P(function(resolve){resolve(value)})}return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator["throw"](value))}catch(e){reject(e)}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})}function __generator(thisArg,body){var _={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]},f,y,t,g;return g={next:verb(0),throw:verb(1),return:verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}function __values(o){var s=typeof Symbol==="function"&&Symbol.iterator,m=s&&o[s],i=0;if(m)return m.call(o);if(o&&typeof o.length==="number")return{next:function(){if(o&&i>=o.length)o=void 0;return{value:o&&o[i++],done:!o}}};throw new TypeError(s?"Object is not iterable.":"Symbol.iterator is not defined.")}function __read(o,n){var m=typeof Symbol==="function"&&o[Symbol.iterator];if(!m)return o;var i=m.call(o),r,ar=[],e;try{while((n===void 0||n-- >0)&&!(r=i.next()).done)ar.push(r.value)}catch(error){e={error:error}}finally{try{if(r&&!r.done&&(m=i["return"]))m.call(i)}finally{if(e)throw e.error}}return ar}function __spread(){for(var ar=[],i=0;i<arguments.length;i++)ar=ar.concat(__read(arguments[i]));return ar}var contexts={};var WEBGL_ATTRIBUTES={alpha:false,antialias:false,premultipliedAlpha:false,preserveDrawingBuffer:false,depth:false,stencil:false,failIfMajorPerformanceCaveat:true};function setWebGLContext(webGLVersion,gl){contexts[webGLVersion]=gl}function getWebGLContext(webGLVersion){if(!(webGLVersion in contexts)){var newCtx=getWebGLRenderingContext(webGLVersion);if(newCtx!==null){contexts[webGLVersion]=newCtx}else{console.log("Could not get context for WebGL version",webGLVersion);return null}}var gl=contexts[webGLVersion];if(gl.isContextLost()){delete contexts[webGLVersion];return getWebGLContext(webGLVersion)}gl.disable(gl.DEPTH_TEST);gl.disable(gl.STENCIL_TEST);gl.disable(gl.BLEND);gl.disable(gl.DITHER);gl.disable(gl.POLYGON_OFFSET_FILL);gl.disable(gl.SAMPLE_COVERAGE);gl.enable(gl.SCISSOR_TEST);gl.enable(gl.CULL_FACE);gl.cullFace(gl.BACK);return contexts[webGLVersion]}function createCanvas(webGLVersion){if(typeof OffscreenCanvas!=="undefined"&&webGLVersion===2){return new OffscreenCanvas(300,150)}else if(typeof document!=="undefined"){return document.createElement("canvas")}else{throw new Error("Cannot create a canvas in this context")}}function getWebGLRenderingContext(webGLVersion){if(webGLVersion!==1&&webGLVersion!==2){throw new Error("Cannot get WebGL rendering context, WebGL is disabled.")}var canvas=createCanvas(webGLVersion);canvas.addEventListener("webglcontextlost",function(ev){ev.preventDefault();delete contexts[webGLVersion]},false);if(webGLVersion===1){return canvas.getContext("webgl",WEBGL_ATTRIBUTES)||canvas.getContext("experimental-webgl",WEBGL_ATTRIBUTES)}return canvas.getContext("webgl2",WEBGL_ATTRIBUTES)}var PackingScheme;(function(PackingScheme){PackingScheme[PackingScheme["DENSE"]=0]="DENSE";PackingScheme[PackingScheme["SHARED_BATCH"]=1]="SHARED_BATCH"})(PackingScheme||(PackingScheme={}));var TextureUsage;(function(TextureUsage){TextureUsage[TextureUsage["RENDER"]=0]="RENDER";TextureUsage[TextureUsage["UPLOAD"]=1]="UPLOAD";TextureUsage[TextureUsage["PIXELS"]=2]="PIXELS";TextureUsage[TextureUsage["DOWNLOAD"]=3]="DOWNLOAD"})(TextureUsage||(TextureUsage={}));var PhysicalTextureType;(function(PhysicalTextureType){PhysicalTextureType[PhysicalTextureType["UNPACKED_FLOAT16"]=0]="UNPACKED_FLOAT16";PhysicalTextureType[PhysicalTextureType["UNPACKED_FLOAT32"]=1]="UNPACKED_FLOAT32";PhysicalTextureType[PhysicalTextureType["PACKED_4X1_UNSIGNED_BYTE"]=2]="PACKED_4X1_UNSIGNED_BYTE";PhysicalTextureType[PhysicalTextureType["PACKED_2X2_FLOAT32"]=3]="PACKED_2X2_FLOAT32";PhysicalTextureType[PhysicalTextureType["PACKED_2X2_FLOAT16"]=4]="PACKED_2X2_FLOAT16"})(PhysicalTextureType||(PhysicalTextureType={}));function getUnpackedMatrixTextureShapeWidthHeight(rows,columns){return[columns,rows]}function getUnpackedArraySizeFromMatrixSize(matrixSize,channelsPerTexture){return matrixSize*channelsPerTexture}function getDenseTexShape(shape){var size=tf.util.sizeFromShape(shape);var texelsNeeded=Math.ceil(size/4);return tf.util.sizeToSquarishShape(texelsNeeded)}function getPackedMatrixTextureShapeWidthHeight(rows,columns){return[Math.max(1,Math.ceil(columns/2)),Math.max(1,Math.ceil(rows/2))]}function getPackedRGBAArraySizeFromMatrixShape(rows,columns){var _a=__read(getPackedMatrixTextureShapeWidthHeight(rows,columns),2),w=_a[0],h=_a[1];return w*h*4}function getTextureConfig(gl,textureHalfFloatExtension){var glany=gl;var internalFormatFloat;var internalFormatHalfFloat;var internalFormatPackedHalfFloat;var internalFormatPackedFloat;var textureFormatFloat;var downloadTextureFormat;var downloadUnpackNumChannels;var defaultNumChannels;var textureTypeHalfFloat;var textureTypeFloat;if(tf.env().getNumber("WEBGL_VERSION")===2){internalFormatFloat=glany.R32F;internalFormatHalfFloat=glany.R16F;internalFormatPackedHalfFloat=glany.RGBA16F;internalFormatPackedFloat=glany.RGBA32F;textureFormatFloat=glany.RED;downloadUnpackNumChannels=4;defaultNumChannels=1;textureTypeHalfFloat=glany.HALF_FLOAT;textureTypeFloat=glany.FLOAT}else{internalFormatFloat=gl.RGBA;internalFormatHalfFloat=gl.RGBA;internalFormatPackedHalfFloat=gl.RGBA;internalFormatPackedFloat=glany.RGBA;textureFormatFloat=gl.RGBA;downloadUnpackNumChannels=4;defaultNumChannels=4;textureTypeHalfFloat=textureHalfFloatExtension!=null?textureHalfFloatExtension.HALF_FLOAT_OES:null;textureTypeFloat=gl.FLOAT}downloadTextureFormat=gl.RGBA;return{internalFormatFloat:internalFormatFloat,internalFormatHalfFloat:internalFormatHalfFloat,internalFormatPackedHalfFloat:internalFormatPackedHalfFloat,internalFormatPackedFloat:internalFormatPackedFloat,textureFormatFloat:textureFormatFloat,downloadTextureFormat:downloadTextureFormat,downloadUnpackNumChannels:downloadUnpackNumChannels,defaultNumChannels:defaultNumChannels,textureTypeHalfFloat:textureTypeHalfFloat,textureTypeFloat:textureTypeFloat}}function callAndCheck(gl,func){var returnValue=func();if(tf.env().getBool("DEBUG")){checkWebGLError(gl)}return returnValue}function checkWebGLError(gl){var error=gl.getError();if(error!==gl.NO_ERROR){throw new Error("WebGL Error: "+getWebGLErrorMessage(gl,error))}}var MIN_FLOAT16=5.96e-8;var MAX_FLOAT16=65504;function canBeRepresented(num){if(tf.env().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||num===0||MIN_FLOAT16<Math.abs(num)&&Math.abs(num)<MAX_FLOAT16){return true}return false}function getWebGLErrorMessage(gl,status){switch(status){case gl.NO_ERROR:return"NO_ERROR";case gl.INVALID_ENUM:return"INVALID_ENUM";case gl.INVALID_VALUE:return"INVALID_VALUE";case gl.INVALID_OPERATION:return"INVALID_OPERATION";case gl.INVALID_FRAMEBUFFER_OPERATION:return"INVALID_FRAMEBUFFER_OPERATION";case gl.OUT_OF_MEMORY:return"OUT_OF_MEMORY";case gl.CONTEXT_LOST_WEBGL:return"CONTEXT_LOST_WEBGL";default:return"Unknown error code "+status}}function getExtensionOrThrow(gl,extensionName){return throwIfNull(gl,function(){return gl.getExtension(extensionName)},'Extension "'+extensionName+'" not supported on this browser.')}function createVertexShader$1(gl,vertexShaderSource){var vertexShader=throwIfNull(gl,function(){return gl.createShader(gl.VERTEX_SHADER)},"Unable to create vertex WebGLShader.");callAndCheck(gl,function(){return gl.shaderSource(vertexShader,vertexShaderSource)});callAndCheck(gl,function(){return gl.compileShader(vertexShader)});if(gl.getShaderParameter(vertexShader,gl.COMPILE_STATUS)===false){console.log(gl.getShaderInfoLog(vertexShader));throw new Error("Failed to compile vertex shader.")}return vertexShader}function createFragmentShader(gl,fragmentShaderSource){var fragmentShader=throwIfNull(gl,function(){return gl.createShader(gl.FRAGMENT_SHADER)},"Unable to create fragment WebGLShader.");callAndCheck(gl,function(){return gl.shaderSource(fragmentShader,fragmentShaderSource)});callAndCheck(gl,function(){return gl.compileShader(fragmentShader)});if(gl.getShaderParameter(fragmentShader,gl.COMPILE_STATUS)===false){logShaderSourceAndInfoLog(fragmentShaderSource,gl.getShaderInfoLog(fragmentShader));throw new Error("Failed to compile fragment shader.")}return fragmentShader}var lineNumberRegex=/ERROR: [0-9]+:([0-9]+):/g;function logShaderSourceAndInfoLog(shaderSource,shaderInfoLog){var lineNumberRegexResult=lineNumberRegex.exec(shaderInfoLog);if(lineNumberRegexResult==null){console.log("Couldn't parse line number in error: "+shaderInfoLog);console.log(shaderSource);return}var lineNumber=+lineNumberRegexResult[1];var shaderLines=shaderSource.split("\n");var pad=shaderLines.length.toString().length+2;var linesWithLineNumbers=shaderLines.map(function(line,lineNumber){return tf.util.rightPad((lineNumber+1).toString(),pad)+line});var maxLineLength=0;for(var i=0;i<linesWithLineNumbers.length;i++){maxLineLength=Math.max(linesWithLineNumbers[i].length,maxLineLength)}var beforeErrorLines=linesWithLineNumbers.slice(0,lineNumber-1);var errorLine=linesWithLineNumbers.slice(lineNumber-1,lineNumber);var afterErrorLines=linesWithLineNumbers.slice(lineNumber);console.log(beforeErrorLines.join("\n"));console.log(shaderInfoLog.split("\n")[0]);console.log("%c "+tf.util.rightPad(errorLine[0],maxLineLength),"border:1px solid red; background-color:#e3d2d2; color:#a61717");console.log(afterErrorLines.join("\n"))}function createProgram(gl){return throwIfNull(gl,function(){return gl.createProgram()},"Unable to create WebGLProgram.")}function linkProgram(gl,program){callAndCheck(gl,function(){return gl.linkProgram(program)});if(gl.getProgramParameter(program,gl.LINK_STATUS)===false){console.log(gl.getProgramInfoLog(program));throw new Error("Failed to link vertex and fragment shaders.")}}function validateProgram(gl,program){callAndCheck(gl,function(){return gl.validateProgram(program)});if(gl.getProgramParameter(program,gl.VALIDATE_STATUS)===false){console.log(gl.getProgramInfoLog(program));throw new Error("Shader program validation failed.")}}function createStaticVertexBuffer(gl,data){var buffer=throwIfNull(gl,function(){return gl.createBuffer()},"Unable to create WebGLBuffer");callAndCheck(gl,function(){return gl.bindBuffer(gl.ARRAY_BUFFER,buffer)});callAndCheck(gl,function(){return gl.bufferData(gl.ARRAY_BUFFER,data,gl.STATIC_DRAW)});return buffer}function createStaticIndexBuffer(gl,data){var buffer=throwIfNull(gl,function(){return gl.createBuffer()},"Unable to create WebGLBuffer");callAndCheck(gl,function(){return gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,buffer)});callAndCheck(gl,function(){return gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,data,gl.STATIC_DRAW)});return buffer}function getNumChannels(){if(tf.env().getNumber("WEBGL_VERSION")===2){return 1}return 4}function createTexture(gl){return throwIfNull(gl,function(){return gl.createTexture()},"Unable to create WebGLTexture.")}function validateTextureSize(width,height){var maxTextureSize=tf.env().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(width<=0||height<=0){var requested="["+width+"x"+height+"]";throw new Error("Requested texture size "+requested+" is invalid.")}if(width>maxTextureSize||height>maxTextureSize){var requested="["+width+"x"+height+"]";var max="["+maxTextureSize+"x"+maxTextureSize+"]";throw new Error("Requested texture size "+requested+" greater than WebGL maximum on this browser / GPU "+max+".")}}function createFramebuffer(gl){return throwIfNull(gl,function(){return gl.createFramebuffer()},"Unable to create WebGLFramebuffer.")}function bindVertexBufferToProgramAttribute(gl,program,attribute,buffer,arrayEntriesPerItem,itemStrideInBytes,itemOffsetInBytes){var loc=gl.getAttribLocation(program,attribute);if(loc===-1){return false}callAndCheck(gl,function(){return gl.bindBuffer(gl.ARRAY_BUFFER,buffer)});callAndCheck(gl,function(){return gl.vertexAttribPointer(loc,arrayEntriesPerItem,gl.FLOAT,false,itemStrideInBytes,itemOffsetInBytes)});callAndCheck(gl,function(){return gl.enableVertexAttribArray(loc)});return true}function bindTextureUnit(gl,texture,textureUnit){validateTextureUnit(gl,textureUnit);callAndCheck(gl,function(){return gl.activeTexture(gl.TEXTURE0+textureUnit)});callAndCheck(gl,function(){return gl.bindTexture(gl.TEXTURE_2D,texture)})}function unbindTextureUnit(gl,textureUnit){validateTextureUnit(gl,textureUnit);callAndCheck(gl,function(){return gl.activeTexture(gl.TEXTURE0+textureUnit)});callAndCheck(gl,function(){return gl.bindTexture(gl.TEXTURE_2D,null)})}function getProgramUniformLocationOrThrow(gl,program,uniformName){return throwIfNull(gl,function(){return gl.getUniformLocation(program,uniformName)},'uniform "'+uniformName+'" not present in program.')}function getProgramUniformLocation(gl,program,uniformName){return gl.getUniformLocation(program,uniformName)}function bindTextureToProgramUniformSampler(gl,texture,uniformSamplerLocation,textureUnit){callAndCheck(gl,function(){return bindTextureUnit(gl,texture,textureUnit)});callAndCheck(gl,function(){return gl.uniform1i(uniformSamplerLocation,textureUnit)})}function bindCanvasToFramebuffer(gl){callAndCheck(gl,function(){return gl.bindFramebuffer(gl.FRAMEBUFFER,null)});callAndCheck(gl,function(){return gl.viewport(0,0,gl.canvas.width,gl.canvas.height)});callAndCheck(gl,function(){return gl.scissor(0,0,gl.canvas.width,gl.canvas.height)})}function bindColorTextureToFramebuffer(gl,texture,framebuffer){callAndCheck(gl,function(){return gl.bindFramebuffer(gl.FRAMEBUFFER,framebuffer)});callAndCheck(gl,function(){return gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,texture,0)})}function unbindColorTextureFromFramebuffer(gl,framebuffer){callAndCheck(gl,function(){return gl.bindFramebuffer(gl.FRAMEBUFFER,framebuffer)});callAndCheck(gl,function(){return gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,null,0)})}function validateFramebuffer(gl){var status=gl.checkFramebufferStatus(gl.FRAMEBUFFER);if(status!==gl.FRAMEBUFFER_COMPLETE){throw new Error("Error binding framebuffer: "+getFramebufferErrorMessage(gl,status))}}function getFramebufferErrorMessage(gl,status){switch(status){case gl.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case gl.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case gl.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case gl.FRAMEBUFFER_UNSUPPORTED:return"FRAMEBUFFER_UNSUPPORTED";default:return"unknown error "+status}}function throwIfNull(gl,returnTOrNull,failureMessage){var tOrNull=callAndCheck(gl,function(){return returnTOrNull()});if(tOrNull==null){throw new Error(failureMessage)}return tOrNull}function validateTextureUnit(gl,textureUnit){var maxTextureUnit=gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1;var glTextureUnit=textureUnit+gl.TEXTURE0;if(glTextureUnit<gl.TEXTURE0||glTextureUnit>maxTextureUnit){var textureUnitRange="[gl.TEXTURE0, gl.TEXTURE"+maxTextureUnit+"]";throw new Error("textureUnit must be in "+textureUnitRange+".")}}function getBatchDim(shape,dimsToSkip){if(dimsToSkip===void 0){dimsToSkip=2}return tf.util.sizeFromShape(shape.slice(0,shape.length-dimsToSkip))}function getRowsCols(shape){if(shape.length===0){throw Error("Cannot get rows and columns of an empty shape array.")}return[shape.length>1?shape[shape.length-2]:1,shape[shape.length-1]]}function getShapeAs3D(shape){var shapeAs3D=[1,1,1];var isScalar=shape.length===0||shape.length===1&&shape[0]===1;if(!isScalar){shapeAs3D=__spread([getBatchDim(shape)],getRowsCols(shape))}return shapeAs3D}function getTextureShapeFromLogicalShape(logShape,isPacked){var _a;if(isPacked===void 0){isPacked=false}var maxTexSize=tf.env().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(isPacked){maxTexSize=maxTexSize*2;logShape=logShape.map(function(d,i){return i>=logShape.length-2?tf.util.nearestLargerEven(logShape[i]):logShape[i]});if(logShape.length===1){logShape=[2,logShape[0]]}}if(logShape.length!==2){var squeezeResult=tf.util.squeezeShape(logShape);logShape=squeezeResult.newShape}var size=tf.util.sizeFromShape(logShape);if(logShape.length<=1&&size<=maxTexSize){return[1,size]}else if(logShape.length===2&&logShape[0]<=maxTexSize&&logShape[1]<=maxTexSize){return logShape}else if(logShape.length===3&&logShape[0]*logShape[1]<=maxTexSize&&logShape[2]<=maxTexSize){return[logShape[0]*logShape[1],logShape[2]]}else if(logShape.length===3&&logShape[0]<=maxTexSize&&logShape[1]*logShape[2]<=maxTexSize){return[logShape[0],logShape[1]*logShape[2]]}else if(logShape.length===4&&logShape[0]*logShape[1]*logShape[2]<=maxTexSize&&logShape[3]<=maxTexSize){return[logShape[0]*logShape[1]*logShape[2],logShape[3]]}else if(logShape.length===4&&logShape[0]<=maxTexSize&&logShape[1]*logShape[2]*logShape[3]<=maxTexSize){return[logShape[0],logShape[1]*logShape[2]*logShape[3]]}else{if(isPacked){var batchDim=getBatchDim(logShape);var rows=2,cols=2;if(logShape.length){_a=__read(getRowsCols(logShape),2),rows=_a[0],cols=_a[1]}size=batchDim*(rows/2)*(cols/2);return tf.util.sizeToSquarishShape(size).map(function(d){return d*2})}return tf.util.sizeToSquarishShape(size)}}function isEven(n){return n%2===0}function isReshapeFree(shape1,shape2){shape1=shape1.slice(-2);shape2=shape2.slice(-2);if(tf.util.arraysEqual(shape1,shape2)){return true}if(!shape1.length||!shape2.length){return true}if(shape1[0]===0||shape1[1]===0||shape2[0]===0||shape2[1]===0){return true}if(shape1.length!==shape2.length){var shape1Cols=shape1.slice(-1)[0];var shape2Cols=shape2.slice(-1)[0];if(shape1Cols===shape2Cols){return true}if(isEven(shape1Cols)&&isEven(shape2Cols)&&(shape1[0]===1||shape2[0]===1)){return true}}return shape1[1]===shape2[1]&&isEven(shape1[0])&&isEven(shape2[0])}var MAX_TEXTURE_SIZE;var MAX_TEXTURES_IN_SHADER;function getWebGLMaxTextureSize(webGLVersion){if(MAX_TEXTURE_SIZE==null){var gl=getWebGLContext(webGLVersion);MAX_TEXTURE_SIZE=gl.getParameter(gl.MAX_TEXTURE_SIZE)}return MAX_TEXTURE_SIZE}function resetMaxTextureSize(){MAX_TEXTURE_SIZE=null}function resetMaxTexturesInShader(){MAX_TEXTURES_IN_SHADER=null}function getMaxTexturesInShader(webGLVersion){if(MAX_TEXTURES_IN_SHADER==null){var gl=getWebGLContext(webGLVersion);MAX_TEXTURES_IN_SHADER=gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,MAX_TEXTURES_IN_SHADER)}function getWebGLDisjointQueryTimerVersion(webGLVersion){if(webGLVersion===0){return 0}var queryTimerVersion;var gl=getWebGLContext(webGLVersion);if(hasExtension(gl,"EXT_disjoint_timer_query_webgl2")&&webGLVersion===2){queryTimerVersion=2}else if(hasExtension(gl,"EXT_disjoint_timer_query")){queryTimerVersion=1}else{queryTimerVersion=0}return queryTimerVersion}function hasExtension(gl,extensionName){var ext=gl.getExtension(extensionName);return ext!=null}function isWebGLVersionEnabled(webGLVersion){try{var gl=getWebGLContext(webGLVersion);if(gl!=null){return true}}catch(e){console.log("Error when getting WebGL context: ",e);return false}return false}function isCapableOfRenderingToFloatTexture(webGLVersion){if(webGLVersion===0){return false}var gl=getWebGLContext(webGLVersion);if(webGLVersion===1){if(!hasExtension(gl,"OES_texture_float")){return false}}else{if(!hasExtension(gl,"EXT_color_buffer_float")){return false}}var isFrameBufferComplete=createFloatTextureAndBindToFramebuffer(gl);return isFrameBufferComplete}function isDownloadFloatTextureEnabled(webGLVersion){if(webGLVersion===0){return false}var gl=getWebGLContext(webGLVersion);if(webGLVersion===1){if(!hasExtension(gl,"OES_texture_float")){return false}if(!hasExtension(gl,"WEBGL_color_buffer_float")){return false}}else{if(hasExtension(gl,"EXT_color_buffer_float")){return createFloatTextureAndBindToFramebuffer(gl)}var COLOR_BUFFER_HALF_FLOAT="EXT_color_buffer_half_float";if(hasExtension(gl,COLOR_BUFFER_HALF_FLOAT)){var textureHalfFloatExtension=gl.getExtension(COLOR_BUFFER_HALF_FLOAT);return createHalfFloatTextureAndBindToFramebuffer(gl,textureHalfFloatExtension)}return false}var isFrameBufferComplete=createFloatTextureAndBindToFramebuffer(gl);return isFrameBufferComplete}function createFloatTextureAndBindToFramebuffer(gl){var texConfig=getTextureConfig(gl);var texture=gl.createTexture();gl.bindTexture(gl.TEXTURE_2D,texture);var width=1;var height=1;gl.texImage2D(gl.TEXTURE_2D,0,texConfig.internalFormatFloat,width,height,0,texConfig.textureFormatFloat,texConfig.textureTypeFloat,null);var frameBuffer=gl.createFramebuffer();gl.bindFramebuffer(gl.FRAMEBUFFER,frameBuffer);gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,texture,0);var isFrameBufferComplete=gl.checkFramebufferStatus(gl.FRAMEBUFFER)===gl.FRAMEBUFFER_COMPLETE;gl.bindTexture(gl.TEXTURE_2D,null);gl.bindFramebuffer(gl.FRAMEBUFFER,null);gl.deleteTexture(texture);gl.deleteFramebuffer(frameBuffer);return isFrameBufferComplete}function createHalfFloatTextureAndBindToFramebuffer(gl,textureHalfFloatExtension){var texConfig=getTextureConfig(gl,textureHalfFloatExtension);var texture=gl.createTexture();gl.bindTexture(gl.TEXTURE_2D,texture);var width=1;var height=1;gl.texImage2D(gl.TEXTURE_2D,0,texConfig.internalFormatHalfFloat,width,height,0,texConfig.textureFormatFloat,texConfig.textureTypeHalfFloat,null);var frameBuffer=gl.createFramebuffer();gl.bindFramebuffer(gl.FRAMEBUFFER,frameBuffer);gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,texture,0);var isFrameBufferComplete=gl.checkFramebufferStatus(gl.FRAMEBUFFER)===gl.FRAMEBUFFER_COMPLETE;gl.bindTexture(gl.TEXTURE_2D,null);gl.bindFramebuffer(gl.FRAMEBUFFER,null);gl.deleteTexture(texture);gl.deleteFramebuffer(frameBuffer);return isFrameBufferComplete}function isWebGLFenceEnabled(webGLVersion){if(webGLVersion!==2){return false}var gl=getWebGLContext(webGLVersion);var isEnabled=gl.fenceSync!=null;return isEnabled}function assertNotComplex(tensor,opName){if(!Array.isArray(tensor)){tensor=[tensor]}tensor.forEach(function(t){if(t!=null){tf.util.assert(t.dtype!=="complex64",function(){return opName+" does not support complex64 tensors "+"in the WebGL backend."})}})}var webgl_util={__proto__:null,callAndCheck:callAndCheck,canBeRepresented:canBeRepresented,getWebGLErrorMessage:getWebGLErrorMessage,getExtensionOrThrow:getExtensionOrThrow,createVertexShader:createVertexShader$1,createFragmentShader:createFragmentShader,createProgram:createProgram,linkProgram:linkProgram,validateProgram:validateProgram,createStaticVertexBuffer:createStaticVertexBuffer,createStaticIndexBuffer:createStaticIndexBuffer,getNumChannels:getNumChannels,createTexture:createTexture,validateTextureSize:validateTextureSize,createFramebuffer:createFramebuffer,bindVertexBufferToProgramAttribute:bindVertexBufferToProgramAttribute,bindTextureUnit:bindTextureUnit,unbindTextureUnit:unbindTextureUnit,getProgramUniformLocationOrThrow:getProgramUniformLocationOrThrow,getProgramUniformLocation:getProgramUniformLocation,bindTextureToProgramUniformSampler:bindTextureToProgramUniformSampler,bindCanvasToFramebuffer:bindCanvasToFramebuffer,bindColorTextureToFramebuffer:bindColorTextureToFramebuffer,unbindColorTextureFromFramebuffer:unbindColorTextureFromFramebuffer,validateFramebuffer:validateFramebuffer,getFramebufferErrorMessage:getFramebufferErrorMessage,getBatchDim:getBatchDim,getRowsCols:getRowsCols,getShapeAs3D:getShapeAs3D,getTextureShapeFromLogicalShape:getTextureShapeFromLogicalShape,isReshapeFree:isReshapeFree,getWebGLMaxTextureSize:getWebGLMaxTextureSize,resetMaxTextureSize:resetMaxTextureSize,resetMaxTexturesInShader:resetMaxTexturesInShader,getMaxTexturesInShader:getMaxTexturesInShader,getWebGLDisjointQueryTimerVersion:getWebGLDisjointQueryTimerVersion,hasExtension:hasExtension,isWebGLVersionEnabled:isWebGLVersionEnabled,isCapableOfRenderingToFloatTexture:isCapableOfRenderingToFloatTexture,isDownloadFloatTextureEnabled:isDownloadFloatTextureEnabled,isWebGLFenceEnabled:isWebGLFenceEnabled,assertNotComplex:assertNotComplex};var ENV=tf.env();ENV.registerFlag("HAS_WEBGL",function(){return ENV.getNumber("WEBGL_VERSION")>0});ENV.registerFlag("WEBGL_VERSION",function(){if(isWebGLVersionEnabled(2)){return 2}else if(isWebGLVersionEnabled(1)){return 1}return 0});ENV.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",function(){return false});ENV.registerFlag("WEBGL_BUFFER_SUPPORTED",function(){return ENV.get("WEBGL_VERSION")===2});ENV.registerFlag("WEBGL_CPU_FORWARD",function(){return true});ENV.registerFlag("WEBGL_FORCE_F16_TEXTURES",function(){return false});ENV.registerFlag("WEBGL_PACK",function(){return ENV.getBool("HAS_WEBGL")});ENV.registerFlag("WEBGL_PACK_NORMALIZATION",function(){return ENV.getBool("WEBGL_PACK")});ENV.registerFlag("WEBGL_PACK_CLIP",function(){return ENV.getBool("WEBGL_PACK")});ENV.registerFlag("WEBGL_PACK_DEPTHWISECONV",function(){return ENV.getBool("WEBGL_PACK")});ENV.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",function(){return ENV.getBool("WEBGL_PACK")});ENV.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",function(){return ENV.getBool("WEBGL_PACK")});ENV.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",function(){return ENV.getBool("WEBGL_PACK")});ENV.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",function(){return ENV.getBool("WEBGL_PACK")});ENV.registerFlag("WEBGL_PACK_REDUCE",function(){return ENV.getBool("WEBGL_PACK")});ENV.registerFlag("WEBGL_LAZILY_UNPACK",function(){return ENV.getBool("WEBGL_PACK")});ENV.registerFlag("WEBGL_CONV_IM2COL",function(){return ENV.getBool("WEBGL_PACK")});ENV.registerFlag("WEBGL_MAX_TEXTURE_SIZE",function(){return getWebGLMaxTextureSize(ENV.getNumber("WEBGL_VERSION"))});ENV.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",function(){return getMaxTexturesInShader(ENV.getNumber("WEBGL_VERSION"))});ENV.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",function(){var webGLVersion=ENV.getNumber("WEBGL_VERSION");if(webGLVersion===0){return 0}return getWebGLDisjointQueryTimerVersion(webGLVersion)});ENV.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",function(){return ENV.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!tf.device_util.isMobile()});ENV.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",function(){return isCapableOfRenderingToFloatTexture(ENV.getNumber("WEBGL_VERSION"))});ENV.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",function(){return ENV.getBool("WEBGL_FORCE_F16_TEXTURES")?false:ENV.getBool("WEBGL_RENDER_FLOAT32_CAPABLE")});ENV.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",function(){return isDownloadFloatTextureEnabled(ENV.getNumber("WEBGL_VERSION"))});ENV.registerFlag("WEBGL_FENCE_API_ENABLED",function(){return isWebGLFenceEnabled(ENV.getNumber("WEBGL_VERSION"))});ENV.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",function(){var useUniforms=ENV.getBool("WEBGL_RENDER_FLOAT32_ENABLED");return useUniforms?4:0});ENV.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD",function(){return-1},function(threshold){if(threshold<0&&threshold!==-1){throw new Error("WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never "+("delete) or at least 0, but got "+threshold+"."))}});ENV.registerFlag("WEBGL_FLUSH_THRESHOLD",function(){return tf.device_util.isMobile()?1:-1},function(threshold){if(threshold<0&&threshold!==-1){throw new Error("WEBGL_FLUSH_THRESHOLD must be -1 (indicating never "+("manual flush) or at least 0, but got "+threshold+"."))}});ENV.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD",function(){return 128});ENV.registerFlag("WEBGL_USE_SHAPES_UNIFORMS",function(){return false});ENV.registerFlag("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD",function(){return 1e5});ENV.registerFlag("TOPK_K_CPU_HANDOFF_THRESHOLD",function(){return 128});function getGlslDifferences(){var version;var attribute;var varyingVs;var varyingFs;var texture2D;var output;var defineOutput;var defineSpecialNaN;var defineSpecialInf;var defineRound;if(tf.env().getNumber("WEBGL_VERSION")===2){version="#version 300 es";attribute="in";varyingVs="out";varyingFs="in";texture2D="texture";output="outputColor";defineOutput="out vec4 outputColor;";defineSpecialNaN="\n      bool isnan_custom(float val) {\n        return (val > 0.0 || val < 0.0) ? false : val != 0.0;\n      }\n\n      bvec4 isnan_custom(vec4 val) {\n        return bvec4(isnan_custom(val.x),\n          isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w));\n      }\n\n      #define isnan(value) isnan_custom(value)\n    ";defineSpecialInf="";defineRound="\n      #define round(value) newRound(value)\n      int newRound(float value) {\n        return int(floor(value + 0.5));\n      }\n\n      ivec4 newRound(vec4 value) {\n        return ivec4(floor(value + vec4(0.5)));\n      }\n    "}else{version="";attribute="attribute";varyingVs="varying";varyingFs="varying";texture2D="texture2D";output="gl_FragColor";defineOutput="";defineSpecialNaN="\n      #define isnan(value) isnan_custom(value)\n      bool isnan_custom(float val) {\n        return (val > 0. || val < 1. || val == 0.) ? false : true;\n      }\n      bvec4 isnan_custom(vec4 val) {\n        return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w));\n      }\n    ";defineSpecialInf="\n      uniform float INFINITY;\n\n      bool isinf(float val) {\n        return abs(val) == INFINITY;\n      }\n      bvec4 isinf(vec4 val) {\n        return equal(abs(val), vec4(INFINITY));\n      }\n    ";defineRound="\n      int round(float value) {\n        return int(floor(value + 0.5));\n      }\n\n      ivec4 round(vec4 value) {\n        return ivec4(floor(value + vec4(0.5)));\n      }\n    "}return{version:version,attribute:attribute,varyingVs:varyingVs,varyingFs:varyingFs,texture2D:texture2D,output:output,defineOutput:defineOutput,defineSpecialNaN:defineSpecialNaN,defineSpecialInf:defineSpecialInf,defineRound:defineRound}}function getLogicalCoordinatesFromFlatIndex(coords,shape,index){if(index===void 0){index="index"}var strides=tf.util.computeStrides(shape);return strides.map(function(stride,i){var line1="int "+coords[i]+" = "+index+" / "+stride;var line2=i===strides.length-1?"int "+coords[i+1]+" = "+index+" - "+coords[i]+" * "+stride:"index -= "+coords[i]+" * "+stride;return line1+"; "+line2+";"}).join("")}function getOutputLogicalCoordinatesFromFlatIndexByUniform(coords,shape,index){if(index===void 0){index="index"}var strides=tf.util.computeStrides(shape);return strides.map(function(_,i){var line1="int "+coords[i]+" = "+index+" / outShapeStrides["+i+"]";var line2=i===strides.length-1?"int "+coords[i+1]+" = "+index+" - "+coords[i]+" * outShapeStrides["+i+"]":"index -= "+coords[i]+" * outShapeStrides["+i+"]";return line1+"; "+line2+";"}).join("")}function symbolicallyComputeStrides(indicesArr,variableName){var numCoords=indicesArr.length;var shape=indicesArr.map(function(d){return variableName+"["+d+"]"});var strides=new Array(numCoords-1);strides[numCoords-2]=shape[numCoords-1];for(var i=numCoords-3;i>=0;--i){strides[i]="("+strides[i+1]+" * "+shape[i+1]+")"}return strides}function getLogicalCoordinatesFromFlatIndexByUniform(coords,variableName,index){if(index===void 0){index="index"}var indicesArray=coords.map(function(_,i){return i});var strides=symbolicallyComputeStrides(indicesArray,variableName);return strides.map(function(_,i){var line1="int "+coords[i]+" = "+index+" / "+strides[i];var line2=i===strides.length-1?"int "+coords[i+1]+" = "+index+" - "+coords[i]+" * "+strides[i]:"index -= "+coords[i]+" * "+strides[i];return line1+"; "+line2+";"}).join("")}function getFlatIndexFrom3D(shape){var strides=tf.util.computeStrides(shape).map(function(d){return d.toString()});return"\n  int getFlatIndex(ivec3 coords) {\n    return coords.x * "+strides[0]+" + coords.y * "+strides[1]+" + coords.z;\n  }\n"}function getFlatIndexFrom3DOutput(){return"\n  int getFlatIndex(ivec3 coords) {\n    return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z;\n  }\n"}var ENCODE_FLOAT_SNIPPET="\n  const float FLOAT_MAX = 1.70141184e38;\n  const float FLOAT_MIN = 1.17549435e-38;\n\n  lowp vec4 encode_float(highp float v) {\n    if (isnan(v)) {\n      return vec4(255, 255, 255, 255);\n    }\n\n    highp float av = abs(v);\n\n    if(av < FLOAT_MIN) {\n      return vec4(0.0, 0.0, 0.0, 0.0);\n    } else if(v > FLOAT_MAX) {\n      return vec4(0.0, 0.0, 128.0, 127.0) / 255.0;\n    } else if(v < -FLOAT_MAX) {\n      return vec4(0.0, 0.0,  128.0, 255.0) / 255.0;\n    }\n\n    highp vec4 c = vec4(0,0,0,0);\n\n    highp float e = floor(log2(av));\n    highp float m = exp2(fract(log2(av))) - 1.0;\n\n    c[2] = floor(128.0 * m);\n    m -= c[2] / 128.0;\n    c[1] = floor(32768.0 * m);\n    m -= c[1] / 32768.0;\n    c[0] = floor(8388608.0 * m);\n\n    highp float ebias = e + 127.0;\n    c[3] = floor(ebias / 2.0);\n    ebias -= c[3] * 2.0;\n    c[2] += floor(ebias) * 128.0;\n\n    c[3] += 128.0 * step(0.0, -v);\n\n    return c / 255.0;\n  }\n";var getBroadcastDims=tf.backend_util.getBroadcastDims;function makeShader(inputsInfo,outputShape,program){var prefixSnippets=[];inputsInfo.forEach(function(x){var size=tf.util.sizeFromShape(x.shapeInfo.logicalShape);if(x.shapeInfo.isUniform){prefixSnippets.push("uniform float "+x.name+(size>1?"["+size+"]":"")+";")}else{prefixSnippets.push("uniform sampler2D "+x.name+";");prefixSnippets.push("uniform int offset"+x.name+";")}if(program.enableShapeUniforms){var uniformShape=getUniformInfoFromShape(program.packedInputs,x.shapeInfo.logicalShape,x.shapeInfo.texShape).uniformShape;switch(uniformShape.length){case 1:prefixSnippets.push("uniform int "+x.name+"Shape;");break;case 2:prefixSnippets.push("uniform ivec2 "+x.name+"Shape;");break;case 3:prefixSnippets.push("uniform ivec3 "+x.name+"Shape;");break;case 4:prefixSnippets.push("uniform ivec4 "+x.name+"Shape;");break}prefixSnippets.push("uniform ivec2 "+x.name+"TexShape;")}});if(program.enableShapeUniforms){switch(outputShape.logicalShape.length){case 1:prefixSnippets.push("uniform int outShape;");break;case 2:prefixSnippets.push("uniform ivec2 outShape;");prefixSnippets.push("uniform int outShapeStrides;");break;case 3:prefixSnippets.push("uniform ivec3 outShape;");prefixSnippets.push("uniform ivec2 outShapeStrides;");break;case 4:prefixSnippets.push("uniform ivec4 outShape;");prefixSnippets.push("uniform ivec3 outShapeStrides;");break}prefixSnippets.push("uniform ivec2 outTexShape;")}if(program.customUniforms){program.customUniforms.forEach(function(d){prefixSnippets.push("uniform "+d.type+" "+d.name+(d.arrayIndex?"["+d.arrayIndex+"]":"")+";")})}var inputPrefixSnippet=prefixSnippets.join("\n");var inputSamplingSnippet=inputsInfo.map(function(x){return getInputSamplingSnippet(x,outputShape,program.packedInputs,program.enableShapeUniforms)}).join("\n");var outTexShape=outputShape.texShape;var glsl=getGlslDifferences();var floatTextureSampleSnippet=getFloatTextureSampleSnippet(glsl);var outputSamplingSnippet;var floatTextureSetOutputSnippet;var shaderPrefix=getShaderPrefix(glsl);if(outputShape.isPacked){outputSamplingSnippet=getPackedOutputSamplingSnippet(outputShape.logicalShape,outTexShape,program.enableShapeUniforms);floatTextureSetOutputSnippet=getFloatTextureSetRGBASnippet(glsl)}else{outputSamplingSnippet=getOutputSamplingSnippet(outputShape.logicalShape,outTexShape,program.enableShapeUniforms);floatTextureSetOutputSnippet=getFloatTextureSetRSnippet(glsl)}if(program.packedInputs){shaderPrefix+=SHADER_PACKED_PREFIX}var source=[shaderPrefix,floatTextureSampleSnippet,floatTextureSetOutputSnippet,inputPrefixSnippet,outputSamplingSnippet,inputSamplingSnippet,program.userCode].join("\n");return source}function getSamplerFromInInfo(inInfo,enableShapeUniforms){if(enableShapeUniforms===void 0){enableShapeUniforms=false}var shape=inInfo.shapeInfo.logicalShape;switch(shape.length){case 0:return getSamplerScalar(inInfo,enableShapeUniforms);case 1:return getSampler1D(inInfo,enableShapeUniforms);case 2:return getSampler2D(inInfo,enableShapeUniforms);case 3:return getSampler3D(inInfo,enableShapeUniforms);case 4:return getSampler4D(inInfo,enableShapeUniforms);case 5:return getSampler5D(inInfo);case 6:return getSampler6D(inInfo);default:throw new Error(shape.length+"-D input sampling"+" is not yet supported")}}function getPackedSamplerFromInInfo(inInfo,enableShapeUniforms){var shape=inInfo.shapeInfo.logicalShape;switch(shape.length){case 0:return getPackedSamplerScalar(inInfo);case 1:return getPackedSampler1D(inInfo,enableShapeUniforms);case 2:return getPackedSampler2D(inInfo,enableShapeUniforms);case 3:return getPackedSampler3D(inInfo,enableShapeUniforms);default:return getPackedSamplerND(inInfo,enableShapeUniforms)}}function getInputSamplingSnippet(inInfo,outShapeInfo,usesPackedTextures,enableShapeUniforms){if(usesPackedTextures===void 0){usesPackedTextures=false}var res="";if(usesPackedTextures){res+=getPackedSamplerFromInInfo(inInfo,enableShapeUniforms)}else{res+=getSamplerFromInInfo(inInfo,enableShapeUniforms)}var inShape=inInfo.shapeInfo.logicalShape;var outShape=outShapeInfo.logicalShape;if(inShape.length<=outShape.length){if(usesPackedTextures){res+=getPackedSamplerAtOutputCoords(inInfo,outShapeInfo)}else{res+=getSamplerAtOutputCoords(inInfo,outShapeInfo)}}return res}function getPackedOutputSamplingSnippet(outShape,outTexShape,enableShapeUniforms){switch(outShape.length){case 0:return getOutputScalarCoords();case 1:return getOutputPacked1DCoords(outShape,outTexShape,enableShapeUniforms);case 2:return getOutputPacked2DCoords(outShape,outTexShape,enableShapeUniforms);case 3:return getOutputPacked3DCoords(outShape,outTexShape,enableShapeUniforms);default:return getOutputPackedNDCoords(outShape,outTexShape,enableShapeUniforms)}}function getOutputSamplingSnippet(outShape,outTexShape,enableShapeUniforms){switch(outShape.length){case 0:return getOutputScalarCoords();case 1:return getOutput1DCoords(outShape,outTexShape,enableShapeUniforms);case 2:return getOutput2DCoords(outShape,outTexShape,enableShapeUniforms);case 3:return getOutput3DCoords(outShape,outTexShape,enableShapeUniforms);case 4:return getOutput4DCoords(outShape,outTexShape,enableShapeUniforms);case 5:return getOutput5DCoords(outShape,outTexShape);case 6:return getOutput6DCoords(outShape,outTexShape);default:throw new Error(outShape.length+"-D output sampling is not yet supported")}}function getFloatTextureSampleSnippet(glsl){return"\n    float sampleTexture(sampler2D textureSampler, vec2 uv) {\n      return "+glsl.texture2D+"(textureSampler, uv).r;\n    }\n  "}function getFloatTextureSetRSnippet(glsl){return"\n    void setOutput(float val) {\n      "+glsl.output+" = vec4(val, 0, 0, 0);\n    }\n  "}function getFloatTextureSetRGBASnippet(glsl){return"\n    void setOutput(vec4 val) {\n      "+glsl.output+" = val;\n    }\n  "}function getShaderPrefix(glsl){var SHADER_PREFIX=glsl.version+"\n    precision highp float;\n    precision highp int;\n    precision highp sampler2D;\n    "+glsl.varyingFs+" vec2 resultUV;\n    "+glsl.defineOutput+"\n    const vec2 halfCR = vec2(0.5, 0.5);\n\n    struct ivec5\n    {\n      int x;\n      int y;\n      int z;\n      int w;\n      int u;\n    };\n\n    struct ivec6\n    {\n      int x;\n      int y;\n      int z;\n      int w;\n      int u;\n      int v;\n    };\n\n    uniform float NAN;\n    "+glsl.defineSpecialNaN+"\n    "+glsl.defineSpecialInf+"\n    "+glsl.defineRound+"\n\n    int imod(int x, int y) {\n      return x - y * (x / y);\n    }\n\n    int idiv(int a, int b, float sign) {\n      int res = a / b;\n      int mod = imod(a, b);\n      if (sign < 0. && mod != 0) {\n        res -= 1;\n      }\n      return res;\n    }\n\n    //Based on the work of Dave Hoskins\n    //https://www.shadertoy.com/view/4djSRW\n    #define HASHSCALE1 443.8975\n    float random(float seed){\n      vec2 p = resultUV * seed;\n      vec3 p3  = fract(vec3(p.xyx) * HASHSCALE1);\n      p3 += dot(p3, p3.yzx + 19.19);\n      return fract((p3.x + p3.y) * p3.z);\n    }\n\n    "+SAMPLE_1D_SNIPPET+"\n    "+SAMPLE_2D_SNIPPET+"\n    "+SAMPLE_3D_SNIPPET+"\n  ";return SHADER_PREFIX}var SAMPLE_1D_SNIPPET="\nvec2 uvFromFlat(int texNumR, int texNumC, int index) {\n  int texR = index / texNumC;\n  int texC = index - texR * texNumC;\n  return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\nvec2 packedUVfrom1D(int texNumR, int texNumC, int index) {\n  int texelIndex = index / 2;\n  int texR = texelIndex / texNumC;\n  int texC = texelIndex - texR * texNumC;\n  return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n";var SAMPLE_2D_SNIPPET="\nvec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR,\n  int texNumC, int row, int col) {\n  int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2);\n  int texR = texelIndex / texNumC;\n  int texC = texelIndex - texR * texNumC;\n  return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n";var SAMPLE_3D_SNIPPET="\nvec2 packedUVfrom3D(int texNumR, int texNumC,\n    int texelsInBatch, int texelsInLogicalRow, int b,\n    int row, int col) {\n  int index = b * texelsInBatch + (row / 2) * texelsInLogicalRow + (col / 2);\n  int texR = index / texNumC;\n  int texC = index - texR * texNumC;\n  return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n";var SHADER_PACKED_PREFIX="\n  float getChannel(vec4 frag, vec2 innerDims) {\n    vec2 modCoord = mod(innerDims, 2.);\n    return modCoord.x == 0. ?\n      (modCoord.y == 0. ? frag.r : frag.g) :\n      (modCoord.y == 0. ? frag.b : frag.a);\n  }\n  float getChannel(vec4 frag, int dim) {\n    float modCoord = mod(float(dim), 2.);\n    return modCoord == 0. ? frag.r : frag.g;\n  }\n";function getOutputScalarCoords(){return"\n    int getOutputCoords() {\n      return 0;\n    }\n  "}function getOutputPacked1DCoords(shape,texShape,enableShapeUniforms){var packedTexShape=[Math.ceil(texShape[0]/2),Math.ceil(texShape[1]/2)];if(packedTexShape[0]===1){if(enableShapeUniforms){return"\n      int getOutputCoords() {\n        return 2 * int(resultUV.x * ceil(float(outTexShape[1]) / 2.0));\n      }\n    "}return"\n      int getOutputCoords() {\n        return 2 * int(resultUV.x * "+packedTexShape[1]+".0);\n      }\n    "}if(packedTexShape[1]===1){if(enableShapeUniforms){return"\n      int getOutputCoords() {\n        return 2 * int(resultUV.y * ceil(float(outTexShape[0]) / 2.0));\n      }\n    "}return"\n      int getOutputCoords() {\n        return 2 * int(resultUV.y * "+packedTexShape[0]+".0);\n      }\n    "}if(enableShapeUniforms){return"\n    int getOutputCoords() {\n      ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(packedTexShape[0], packedTexShape[1]));\n      return 2 * (resTexRC.x * packedTexShape[1] + resTexRC.y);\n    }\n  "}return"\n    int getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2("+packedTexShape[0]+", "+packedTexShape[1]+"));\n      return 2 * (resTexRC.x * "+packedTexShape[1]+" + resTexRC.y);\n    }\n  "}function getOutput1DCoords(shape,texShape,enableShapeUniforms){if(texShape[0]===1){if(enableShapeUniforms){return"\n      int getOutputCoords() {\n        return int(resultUV.x * float(outTexShape[1]));\n      }\n    "}return"\n      int getOutputCoords() {\n        return int(resultUV.x * "+texShape[1]+".0);\n      }\n    "}if(texShape[1]===1){if(enableShapeUniforms){return"\n      int getOutputCoords() {\n        return int(resultUV.y * float(outTexShape[0]));\n      }\n    "}return"\n      int getOutputCoords() {\n        return int(resultUV.y * "+texShape[0]+".0);\n      }\n    "}if(enableShapeUniforms){return"\n    int getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(outTexShape[0], outTexShape[1]));\n      return resTexRC.x * outTexShape[1] + resTexRC.y;\n    }\n  "}return"\n    int getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2("+texShape[0]+", "+texShape[1]+"));\n      return resTexRC.x * "+texShape[1]+" + resTexRC.y;\n    }\n  "}function getOutputPacked3DCoords(shape,texShape,enableShapeUniforms){if(enableShapeUniforms){return"\n    ivec3 getOutputCoords() {\n      ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));\n      int texelsInLogicalRow = int(ceil(float(outShape[2]) / 2.0));\n      int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[1]) / 2.0));\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(packedTexShape[0], packedTexShape[1]));\n      int index = resTexRC.x * packedTexShape[1] + resTexRC.y;\n\n      int b = index / texelsInBatch;\n      index -= b * texelsInBatch;\n\n      int r = 2 * (index / texelsInLogicalRow);\n      int c = imod(index, texelsInLogicalRow) * 2;\n\n      return ivec3(b, r, c);\n    }\n  "}var packedTexShape=[Math.ceil(texShape[0]/2),Math.ceil(texShape[1]/2)];var texelsInLogicalRow=Math.ceil(shape[2]/2);var texelsInBatch=texelsInLogicalRow*Math.ceil(shape[1]/2);return"\n    ivec3 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2("+packedTexShape[0]+", "+packedTexShape[1]+"));\n      int index = resTexRC.x * "+packedTexShape[1]+" + resTexRC.y;\n\n      int b = index / "+texelsInBatch+";\n      index -= b * "+texelsInBatch+";\n\n      int r = 2 * (index / "+texelsInLogicalRow+");\n      int c = imod(index, "+texelsInLogicalRow+") * 2;\n\n      return ivec3(b, r, c);\n    }\n  "}function getOutput3DCoords(shape,texShape,enableShapeUniforms){if(enableShapeUniforms){var coordsFromIndexSnippet_1=getOutputLogicalCoordinatesFromFlatIndexByUniform(["r","c","d"],shape);return"\n  ivec3 getOutputCoords() {\n    ivec2 resTexRC = ivec2(resultUV.yx *\n                           vec2(outTexShape[0], outTexShape[1]));\n    int index = resTexRC.x * outTexShape[1] + resTexRC.y;\n    "+coordsFromIndexSnippet_1+"\n    return ivec3(r, c, d);\n  }\n"}var coordsFromIndexSnippet=getLogicalCoordinatesFromFlatIndex(["r","c","d"],shape);return"\n    ivec3 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2("+texShape[0]+", "+texShape[1]+"));\n      int index = resTexRC.x * "+texShape[1]+" + resTexRC.y;\n      "+coordsFromIndexSnippet+"\n      return ivec3(r, c, d);\n    }\n  "}function getOutputPackedNDCoords(shape,texShape,enableShapeUniforms){if(enableShapeUniforms){return"\n    ivec4 getOutputCoords() {\n      ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(packedTexShape[0], packedTexShape[1]));\n      int index = resTexRC.x * packedTexShape[1] + resTexRC.y;\n\n      int texelsInLogicalRow = int(ceil(float(outShape[3]) / 2.0));\n      int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[2]) / 2.0));\n      int texelsInBatchN = texelsInBatch * outShape[1];\n\n      int b2 = index / texelsInBatchN;\n      index -= b2 * texelsInBatchN;\n\n      int b = index / texelsInBatch;\n      index -= b * texelsInBatch;\n\n      int r = 2 * (index / texelsInLogicalRow);\n      int c = imod(index, texelsInLogicalRow) * 2;\n\n      return ivec4(b2, b, r, c);\n    }\n  "}var packedTexShape=[Math.ceil(texShape[0]/2),Math.ceil(texShape[1]/2)];var texelsInLogicalRow=Math.ceil(shape[shape.length-1]/2);var texelsInBatch=texelsInLogicalRow*Math.ceil(shape[shape.length-2]/2);var texelsInBatchN=texelsInBatch;var batches="";var coords="b, r, c";for(var b=2;b<shape.length-1;b++){texelsInBatchN*=shape[shape.length-b-1];batches="\n      int b"+b+" = index / "+texelsInBatchN+";\n      index -= b"+b+" * "+texelsInBatchN+";\n    "+batches;coords="b"+b+", "+coords}return"\n    ivec"+shape.length+" getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2("+packedTexShape[0]+", "+packedTexShape[1]+"));\n      int index = resTexRC.x * "+packedTexShape[1]+" + resTexRC.y;\n\n      "+batches+"\n\n      int b = index / "+texelsInBatch+";\n      index -= b * "+texelsInBatch+";\n\n      int r = 2 * (index / "+texelsInLogicalRow+");\n      int c = imod(index, "+texelsInLogicalRow+") * 2;\n\n      return ivec"+shape.length+"("+coords+");\n    }\n  "}function getOutput4DCoords(shape,texShape,enableShapeUniforms){if(enableShapeUniforms){var coordsFromIndexSnippet_2=getOutputLogicalCoordinatesFromFlatIndexByUniform(["r","c","d","d2"],shape);return"\n    ivec4 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n        vec2(outTexShape[0], outTexShape[1]));\n      int index = resTexRC.x * outTexShape[1] + resTexRC.y;\n      "+coordsFromIndexSnippet_2+"\n      return ivec4(r, c, d, d2);\n    }\n  "}var coordsFromIndexSnippet=getLogicalCoordinatesFromFlatIndex(["r","c","d","d2"],shape);return"\n    ivec4 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n        vec2("+texShape[0]+", "+texShape[1]+"));\n      int index = resTexRC.x * "+texShape[1]+" + resTexRC.y;\n      "+coordsFromIndexSnippet+"\n      return ivec4(r, c, d, d2);\n    }\n  "}function getOutput5DCoords(shape,texShape){var coordsFromIndexSnippet=getLogicalCoordinatesFromFlatIndex(["r","c","d","d2","d3"],shape);return"\n    ivec5 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx * vec2("+texShape[0]+",\n                             "+texShape[1]+"));\n\n      int index = resTexRC.x * "+texShape[1]+" + resTexRC.y;\n\n      "+coordsFromIndexSnippet+"\n\n      ivec5 outShape = ivec5(r, c, d, d2, d3);\n      return outShape;\n    }\n  "}function getOutput6DCoords(shape,texShape){var coordsFromIndexSnippet=getLogicalCoordinatesFromFlatIndex(["r","c","d","d2","d3","d4"],shape);return"\n    ivec6 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n        vec2("+texShape[0]+", "+texShape[1]+"));\n      int index = resTexRC.x * "+texShape[1]+" + resTexRC.y;\n\n      "+coordsFromIndexSnippet+"\n\n      ivec6 result = ivec6(r, c, d, d2, d3, d4);\n      return result;\n    }\n  "}function getOutputPacked2DCoords(shape,texShape,enableShapeUniforms){var packedTexShape=[Math.ceil(texShape[0]/2),Math.ceil(texShape[1]/2)];if(tf.util.arraysEqual(shape,texShape)){if(enableShapeUniforms){return"\n      ivec2 getOutputCoords() {\n        ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));\n        return 2 * ivec2(resultUV.yx * vec2(packedTexShape[0], packedTexShape[1]));\n      }\n    "}return"\n      ivec2 getOutputCoords() {\n        return 2 * ivec2(resultUV.yx * vec2("+packedTexShape[0]+", "+packedTexShape[1]+"));\n      }\n    "}var texelsInLogicalRow=Math.ceil(shape[1]/2);if(enableShapeUniforms){return"\n    ivec2 getOutputCoords() {\n      ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));\n      int texelsInLogicalRow = int(ceil(float(outShape[1]) / 2.0));\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(packedTexShape[0], packedTexShape[1]));\n\n      int index = resTexRC.x * packedTexShape[1] + resTexRC.y;\n      int r = 2 * (index / texelsInLogicalRow);\n      int c = imod(index, texelsInLogicalRow) * 2;\n\n      return ivec2(r, c);\n    }\n  "}return"\n    ivec2 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2("+packedTexShape[0]+", "+packedTexShape[1]+"));\n\n      int index = resTexRC.x * "+packedTexShape[1]+" + resTexRC.y;\n      int r = 2 * (index / "+texelsInLogicalRow+");\n      int c = imod(index, "+texelsInLogicalRow+") * 2;\n\n      return ivec2(r, c);\n    }\n  "}function getOutput2DCoords(shape,texShape,enableShapeUniforms){if(tf.util.arraysEqual(shape,texShape)){if(enableShapeUniforms){return"\n      ivec2 getOutputCoords() {\n        return ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1]));\n      }\n    "}return"\n      ivec2 getOutputCoords() {\n        return ivec2(resultUV.yx * vec2("+texShape[0]+", "+texShape[1]+"));\n      }\n    "}if(shape[1]===1){if(enableShapeUniforms){return"\n      ivec2 getOutputCoords() {\n        ivec2 resTexRC = ivec2(resultUV.yx *\n                               vec2(outTexShape[0], outTexShape[1]));\n        int index = resTexRC.x * outTexShape[1] + resTexRC.y;\n        return ivec2(index, 0);\n      }\n    "}return"\n      ivec2 getOutputCoords() {\n        ivec2 resTexRC = ivec2(resultUV.yx *\n                               vec2("+texShape[0]+", "+texShape[1]+"));\n        int index = resTexRC.x * "+texShape[1]+" + resTexRC.y;\n        return ivec2(index, 0);\n      }\n    "}if(shape[0]===1){if(enableShapeUniforms){return"\n      ivec2 getOutputCoords() {\n        ivec2 resTexRC = ivec2(resultUV.yx *\n                               vec2(outTexShape[0], outTexShape[1]));\n        int index = resTexRC.x * outTexShape[1] + resTexRC.y;\n        return ivec2(0, index);\n      }\n    "}return"\n      ivec2 getOutputCoords() {\n        ivec2 resTexRC = ivec2(resultUV.yx *\n                               vec2("+texShape[0]+", "+texShape[1]+"));\n        int index = resTexRC.x * "+texShape[1]+" + resTexRC.y;\n        return ivec2(0, index);\n      }\n    "}if(enableShapeUniforms){return"\n    ivec2 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(outTexShape[0], outTexShape[1]));\n      int index = resTexRC.x * outTexShape[1] + resTexRC.y;\n      int r = index / outShape[1];\n      int c = index - r * outShape[1];\n      return ivec2(r, c);\n    }\n  "}return"\n    ivec2 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2("+texShape[0]+", "+texShape[1]+"));\n      int index = resTexRC.x * "+texShape[1]+" + resTexRC.y;\n      int r = index / "+shape[1]+";\n      int c = index - r * "+shape[1]+";\n      return ivec2(r, c);\n    }\n  "}function getFlatOffsetUniformName(texName){return"offset"+texName}function getPackedSamplerScalar(inputInfo){var texName=inputInfo.name;var funcName="get"+texName.charAt(0).toUpperCase()+texName.slice(1);var glsl=getGlslDifferences();return"\n    vec4 "+funcName+"() {\n      return "+glsl.texture2D+"("+texName+", halfCR);\n    }\n  "}function getSamplerScalar(inputInfo,enableShapeUniforms){var texName=inputInfo.name;var funcName="get"+texName.charAt(0).toUpperCase()+texName.slice(1);if(inputInfo.shapeInfo.isUniform){return"float "+funcName+"() {return "+texName+";}"}var _a=__read(inputInfo.shapeInfo.texShape,2),texNumR=_a[0],texNumC=_a[1];if(texNumR===1&&texNumC===1){return"\n      float "+funcName+"() {\n        return sampleTexture("+texName+", halfCR);\n      }\n    "}var offset=getFlatOffsetUniformName(texName);if(enableShapeUniforms){return"\n    float "+funcName+"() {\n      vec2 uv = uvFromFlat("+texName+"TexShape[0], "+texName+"TexShape[1], "+offset+");\n      return sampleTexture("+texName+", uv);\n    }\n  "}var _b=__read(inputInfo.shapeInfo.texShape,2),tNumR=_b[0],tNumC=_b[1];return"\n    float "+funcName+"() {\n      vec2 uv = uvFromFlat("+tNumR+", "+tNumC+", "+offset+");\n      return sampleTexture("+texName+", uv);\n    }\n  "}function getPackedSampler1D(inputInfo,enableShapeUniforms){var texName=inputInfo.name;var funcName="get"+texName.charAt(0).toUpperCase()+texName.slice(1);var texShape=inputInfo.shapeInfo.texShape;var glsl=getGlslDifferences();if(enableShapeUniforms){return"\n    vec4 "+funcName+"(int index) {\n      ivec2 packedTexShape = ivec2(ceil(float("+texName+"TexShape[0]) / 2.0), ceil(float("+texName+"TexShape[1]) / 2.0));\n      vec2 uv = packedUVfrom1D(\n        packedTexShape[0], packedTexShape[1], index);\n      return "+glsl.texture2D+"("+texName+", uv);\n    }\n  "}var packedTexShape=[Math.ceil(texShape[0]/2),Math.ceil(texShape[1]/2)];return"\n    vec4 "+funcName+"(int index) {\n      vec2 uv = packedUVfrom1D(\n        "+packedTexShape[0]+", "+packedTexShape[1]+", index);\n      return "+glsl.texture2D+"("+texName+", uv);\n    }\n  "}function getSampler1D(inputInfo,enableShapeUniforms){var texName=inputInfo.name;var funcName="get"+texName.charAt(0).toUpperCase()+texName.slice(1);if(inputInfo.shapeInfo.isUniform){return"\n      float "+funcName+"(int index) {\n        "+getUniformSampler(inputInfo)+"\n      }\n    "}var texShape=inputInfo.shapeInfo.texShape;var tNumR=texShape[0];var tNumC=texShape[1];if(tNumC===1&&tNumR===1){return"\n      float "+funcName+"(int index) {\n        return sampleTexture("+texName+", halfCR);\n      }\n    "}var offset=getFlatOffsetUniformName(texName);if(tNumC===1){if(enableShapeUniforms){return"\n      float "+funcName+"(int index) {\n        vec2 uv = vec2(0.5, (float(index + "+offset+") + 0.5) / float("+texName+"TexShape[0]));\n        return sampleTexture("+texName+", uv);\n      }\n    "}return"\n      float "+funcName+"(int index) {\n        vec2 uv = vec2(0.5, (float(index + "+offset+") + 0.5) / "+tNumR+".0);\n        return sampleTexture("+texName+", uv);\n      }\n    "}if(tNumR===1){if(enableShapeUniforms){return"\n      float "+funcName+"(int index) {\n        vec2 uv = vec2((float(index + "+offset+") + 0.5) / float("+texName+"TexShape[1]), 0.5);\n        return sampleTexture("+texName+", uv);\n      }\n    "}return"\n      float "+funcName+"(int index) {\n        vec2 uv = vec2((float(index + "+offset+") + 0.5) / "+tNumC+".0, 0.5);\n        return sampleTexture("+texName+", uv);\n      }\n    "}if(enableShapeUniforms){return"\n    float "+funcName+"(int index) {\n      vec2 uv = uvFromFlat("+texName+"TexShape[0], "+texName+"TexShape[1], index + "+offset+");\n      return sampleTexture("+texName+", uv);\n    }\n  "}return"\n    float "+funcName+"(int index) {\n      vec2 uv = uvFromFlat("+tNumR+", "+tNumC+", index + "+offset+");\n      return sampleTexture("+texName+", uv);\n    }\n  "}function getPackedSampler2D(inputInfo,enableShapeUniforms){var shape=inputInfo.shapeInfo.logicalShape;var texName=inputInfo.name;var funcName="get"+texName.charAt(0).toUpperCase()+texName.slice(1);var texShape=inputInfo.shapeInfo.texShape;var texNumR=texShape[0];var texNumC=texShape[1];var glsl=getGlslDifferences();if(texShape!=null&&tf.util.arraysEqual(shape,texShape)){if(enableShapeUniforms){return"\n      vec4 "+funcName+"(int row, int col) {\n        vec2 uv = (vec2(col, row) + halfCR) / vec2("+texName+"TexShape[1], "+texName+"TexShape[0]);\n\n        return "+glsl.texture2D+"("+texName+", uv);\n      }\n    "}return"\n      vec4 "+funcName+"(int row, int col) {\n        vec2 uv = (vec2(col, row) + halfCR) / vec2("+texNumC+".0, "+texNumR+".0);\n\n        return "+glsl.texture2D+"("+texName+", uv);\n      }\n    "}if(enableShapeUniforms){return"\n    vec4 "+funcName+"(int row, int col) {\n      ivec2 packedTexShape = ivec2(ceil(float("+texName+"TexShape[0]) / 2.0), ceil(float("+texName+"TexShape[1]) / 2.0));\n      int valuesPerRow = int(ceil(float("+texName+"Shape[1]) / 2.0));\n      vec2 uv = packedUVfrom2D(valuesPerRow, packedTexShape[0], packedTexShape[1], row, col);\n      return "+glsl.texture2D+"("+texName+", uv);\n    }\n  "}var packedTexShape=[Math.ceil(texShape[0]/2),Math.ceil(texShape[1]/2)];var valuesPerRow=Math.ceil(shape[1]/2);return"\n    vec4 "+funcName+"(int row, int col) {\n      vec2 uv = packedUVfrom2D("+valuesPerRow+", "+packedTexShape[0]+", "+packedTexShape[1]+", row, col);\n      return "+glsl.texture2D+"("+texName+", uv);\n    }\n  "}function getSampler2D(inputInfo,enableShapeUniforms){var shape=inputInfo.shapeInfo.logicalShape;var texName=inputInfo.name;var funcName="get"+texName.charAt(0).toUpperCase()+texName.slice(1);var texShape=inputInfo.shapeInfo.texShape;if(texShape!=null&&tf.util.arraysEqual(shape,texShape)){if(enableShapeUniforms){return"\n      float "+funcName+"(int row, int col) {\n        vec2 uv = (vec2(col, row) + halfCR) / vec2("+texName+"TexShape[1], "+texName+"TexShape[0]);\n        return sampleTexture("+texName+", uv);\n      }\n    "}var texNumR_1=texShape[0];var texNumC_1=texShape[1];return"\n    float "+funcName+"(int row, int col) {\n      vec2 uv = (vec2(col, row) + halfCR) / vec2("+texNumC_1+".0, "+texNumR_1+".0);\n      return sampleTexture("+texName+", uv);\n    }\n  "}var _a=tf.util.squeezeShape(shape),newShape=_a.newShape,keptDims=_a.keptDims;var squeezedShape=newShape;if(squeezedShape.length<shape.length){var newInputInfo=squeezeInputInfo(inputInfo,squeezedShape);var params=["row","col"];return"\n      "+getSamplerFromInInfo(newInputInfo,enableShapeUniforms)+"\n      float "+funcName+"(int row, int col) {\n        return "+funcName+"("+getSqueezedParams(params,keptDims)+");\n      }\n    "}if(inputInfo.shapeInfo.isUniform){return"\n      float "+funcName+"(int row, int col) {\n        int index = round(dot(vec2(row, col), vec2("+shape[1]+", 1)));\n        "+getUniformSampler(inputInfo)+"\n      }\n    "}var texNumR=texShape[0];var texNumC=texShape[1];var offset=getFlatOffsetUniformName(texName);if(texNumC===1){if(enableShapeUniforms){return"\n      float "+funcName+"(int row, int col) {\n        float index = dot(vec3(row, col, "+offset+"), vec3("+texName+"Shape[1], 1, 1));\n        vec2 uv = vec2(0.5, (index + 0.5) / float("+texName+"TexShape[0]));\n        return sampleTexture("+texName+", uv);\n      }\n    "}return"\n    float "+funcName+"(int row, int col) {\n      float index = dot(vec3(row, col, "+offset+"), vec3("+shape[1]+", 1, 1));\n      vec2 uv = vec2(0.5, (index + 0.5) / "+texNumR+".0);\n      return sampleTexture("+texName+", uv);\n    }\n  "}if(texNumR===1){if(enableShapeUniforms){return"\n      float "+funcName+"(int row, int col) {\n        float index = dot(vec3(row, col, "+offset+"), vec3("+texName+"Shape[1], 1, 1));\n        vec2 uv = vec2((index + 0.5) / float("+texName+"TexShape[1]), 0.5);\n        return sampleTexture("+texName+", uv);\n      }\n    "}return"\n    float "+funcName+"(int row, int col) {\n      float index = dot(vec3(row, col, "+offset+"), vec3("+shape[1]+", 1, 1));\n      vec2 uv = vec2((index + 0.5) / "+texNumC+".0, 0.5);\n      return sampleTexture("+texName+", uv);\n    }\n  "}if(enableShapeUniforms){return"\n      float "+funcName+"(int row, int col) {\n        // Explicitly use integer operations as dot() only works on floats.\n        int index = row * "+texName+"Shape[1] + col + "+offset+";\n        vec2 uv = uvFromFlat("+texName+"TexShape[0], "+texName+"TexShape[1], index);\n        return sampleTexture("+texName+", uv);\n      }\n    "}return"\n  float "+funcName+"(int row, int col) {\n    // Explicitly use integer operations as dot() only works on floats.\n    int index = row * "+shape[1]+" + col + "+offset+";\n    vec2 uv = uvFromFlat("+texNumR+", "+texNumC+", index);\n    return sampleTexture("+texName+", uv);\n  }\n"}function getPackedSampler3D(inputInfo,enableShapeUniforms){var shape=inputInfo.shapeInfo.logicalShape;var texName=inputInfo.name;var funcName="get"+texName.charAt(0).toUpperCase()+texName.slice(1);var texShape=inputInfo.shapeInfo.texShape;var packedTexShape=[Math.ceil(texShape[0]/2),Math.ceil(texShape[1]/2)];if(shape[0]===1){var squeezedShape=shape.slice(1);var keptDims=[1,2];var newInputInfo=squeezeInputInfo(inputInfo,squeezedShape);var params=["b","row","col"];return"\n        "+getPackedSamplerFromInInfo(newInputInfo,enableShapeUniforms)+"\n        vec4 "+funcName+"(int b, int row, int col) {\n          return "+funcName+"("+getSqueezedParams(params,keptDims)+");\n        }\n      "}var glsl=getGlslDifferences();if(enableShapeUniforms){return"\n    vec4 "+funcName+"(int b, int row, int col) {\n      ivec2 packedTexShape = ivec2(ceil(float("+texName+"TexShape[0]) / 2.0), ceil(float("+texName+"TexShape[1]) / 2.0));\n      int valuesPerRow = int(ceil(float("+texName+"Shape[2]) / 2.0));\n      int texelsInBatch = valuesPerRow * int(ceil(float("+texName+"Shape[1]) / 2.0));\n      vec2 uv = packedUVfrom3D(\n        packedTexShape[0], packedTexShape[1], texelsInBatch, valuesPerRow, b, row, col);\n      return "+glsl.texture2D+"("+texName+", uv);\n    }\n  "}var texNumR=packedTexShape[0];var texNumC=packedTexShape[1];var valuesPerRow=Math.ceil(shape[2]/2);var texelsInBatch=valuesPerRow*Math.ceil(shape[1]/2);return"\n    vec4 "+funcName+"(int b, int row, int col) {\n      vec2 uv = packedUVfrom3D(\n        "+texNumR+", "+texNumC+", "+texelsInBatch+", "+valuesPerRow+", b, row, col);\n      return "+glsl.texture2D+"("+texName+", uv);\n    }\n  "}function getSampler3D(inputInfo,enableShapeUniforms){var shape=inputInfo.shapeInfo.logicalShape;var texName=inputInfo.name;var funcName="get"+texName.charAt(0).toUpperCase()+texName.slice(1);var stride0=shape[1]*shape[2];var stride1=shape[2];var _a=tf.util.squeezeShape(shape),newShape=_a.newShape,keptDims=_a.keptDims;var squeezedShape=newShape;if(squeezedShape.length<shape.length){var newInputInfo=squeezeInputInfo(inputInfo,squeezedShape);var params=["row","col","depth"];return"\n        "+getSamplerFromInInfo(newInputInfo,enableShapeUniforms)+"\n        float "+funcName+"(int row, int col, int depth) {\n          return "+funcName+"("+getSqueezedParams(params,keptDims)+");\n        }\n      "}if(inputInfo.shapeInfo.isUniform){return"\n      float "+funcName+"(int row, int col, int depth) {\n        int index = round(dot(vec3(row, col, depth),\n                          vec3("+stride0+", "+stride1+", 1)));\n        "+getUniformSampler(inputInfo)+"\n      }\n    "}var texShape=inputInfo.shapeInfo.texShape;var texNumR=texShape[0];var texNumC=texShape[1];var flatOffset=inputInfo.shapeInfo.flatOffset;if(texNumC===stride0&&flatOffset==null){if(enableShapeUniforms){return"\n      float "+funcName+"(int row, int col, int depth) {\n        int stride1 = "+texName+"Shape[2];\n        float texR = float(row);\n        float texC = dot(vec2(col, depth), vec2(stride1, 1));\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                   vec2("+texName+"TexShape[1], "+texName+"TexShape[0]);\n        return sampleTexture("+texName+", uv);\n      }\n    "}return"\n        float "+funcName+"(int row, int col, int depth) {\n          float texR = float(row);\n          float texC = dot(vec2(col, depth), vec2("+stride1+", 1));\n          vec2 uv = (vec2(texC, texR) + halfCR) /\n                     vec2("+texNumC+".0, "+texNumR+".0);\n          return sampleTexture("+texName+", uv);\n        }\n      "}if(texNumC===stride1&&flatOffset==null){if(enableShapeUniforms){return"\n      float "+funcName+"(int row, int col, int depth) {\n        float texR = dot(vec2(row, col), vec2("+texName+"Shape[1], 1));\n        float texC = float(depth);\n        vec2 uv = (vec2(texC, texR) + halfCR) / vec2("+texName+"TexShape[1], "+texName+"TexShape[0]);\n        return sampleTexture("+texName+", uv);\n      }\n    "}return"\n    float "+funcName+"(int row, int col, int depth) {\n      float texR = dot(vec2(row, col), vec2("+shape[1]+", 1));\n      float texC = float(depth);\n      vec2 uv = (vec2(texC, texR) + halfCR) / vec2("+texNumC+".0, "+texNumR+".0);\n      return sampleTexture("+texName+", uv);\n    }\n  "}var offset=getFlatOffsetUniformName(texName);if(enableShapeUniforms){return"\n    float "+funcName+"(int row, int col, int depth) {\n      // Explicitly use integer operations as dot() only works on floats.\n      int stride0 = "+texName+"Shape[1] * "+texName+"Shape[2];\n      int stride1 = "+texName+"Shape[2];\n      int index = row * "+stride0+" + col * "+stride1+" + depth + "+offset+";\n      vec2 uv = uvFromFlat("+texName+"TexShape[0], "+texName+"TexShape[1], index);\n      return sampleTexture("+texName+", uv);\n    }\n    "}return"\n      float "+funcName+"(int row, int col, int depth) {\n        // Explicitly use integer operations as dot() only works on floats.\n        int index = row * "+stride0+" + col * "+stride1+" + depth + "+offset+";\n        vec2 uv = uvFromFlat("+texNumR+", "+texNumC+", index);\n        return sampleTexture("+texName+", uv);\n      }\n  "}function getPackedSamplerND(inputInfo,enableShapeUniforms){var texName=inputInfo.name;var funcName="get"+texName.charAt(0).toUpperCase()+texName.slice(1);var glsl=getGlslDifferences();if(enableShapeUniforms){return"\n    vec4 "+funcName+"(int b2, int b, int row, int col) {\n      int valuesPerRow = int(ceil(float("+texName+"Shape[3]) / 2.0));\n      int texelsInBatch = valuesPerRow * int(ceil(float("+texName+"Shape[2]) / 2.0));\n      int index = b * texelsInBatch + (row / 2) * valuesPerRow + (col / 2);\n      texelsInBatch *= "+texName+"Shape[1];\n      index = b2 * texelsInBatch + index;\n      ivec2 packedTexShape = ivec2(ceil(float("+texName+"TexShape[0]) / 2.0), ceil(float("+texName+"TexShape[1]) / 2.0));\n      int texR = index / packedTexShape[1];\n      int texC = index - texR * packedTexShape[1];\n      vec2 uv = (vec2(texC, texR) + halfCR) / vec2(packedTexShape[1], packedTexShape[0]); return "+glsl.texture2D+"("+texName+", uv);\n    }\n  "}var shape=inputInfo.shapeInfo.logicalShape;var rank=shape.length;var texShape=inputInfo.shapeInfo.texShape;var packedTexShape=[Math.ceil(texShape[0]/2),Math.ceil(texShape[1]/2)];var texNumR=packedTexShape[0];var texNumC=packedTexShape[1];var valuesPerRow=Math.ceil(shape[rank-1]/2);var texelsInBatch=valuesPerRow*Math.ceil(shape[rank-2]/2);var params="int b, int row, int col";var index="b * "+texelsInBatch+" + (row / 2) * "+valuesPerRow+" + (col / 2)";for(var b=2;b<rank-1;b++){params="int b"+b+", "+params;texelsInBatch*=shape[rank-b-1];index="b"+b+" * "+texelsInBatch+" + "+index}return"\n    vec4 "+funcName+"("+params+") {\n      int index = "+index+";\n      int texR = index / "+texNumC+";\n      int texC = index - texR * "+texNumC+";\n      vec2 uv = (vec2(texC, texR) + halfCR) / vec2("+texNumC+", "+texNumR+");\n      return "+glsl.texture2D+"("+texName+", uv);\n    }\n  "}function getSampler4D(inputInfo,enableShapeUniforms){var shape=inputInfo.shapeInfo.logicalShape;var texName=inputInfo.name;var funcName="get"+texName.charAt(0).toUpperCase()+texName.slice(1);var stride2=shape[3];var stride1=shape[2]*stride2;var stride0=shape[1]*stride1;var _a=tf.util.squeezeShape(shape),newShape=_a.newShape,keptDims=_a.keptDims;if(newShape.length<shape.length){var newInputInfo=squeezeInputInfo(inputInfo,newShape);var params=["row","col","depth","depth2"];return"\n      "+getSamplerFromInInfo(newInputInfo,enableShapeUniforms)+"\n      float "+funcName+"(int row, int col, int depth, int depth2) {\n        return "+funcName+"("+getSqueezedParams(params,keptDims)+");\n      }\n    "}if(inputInfo.shapeInfo.isUniform){return"\n      float "+funcName+"(int row, int col, int depth, int depth2) {\n        int index = round(dot(vec4(row, col, depth, depth2),\n                          vec4("+stride0+", "+stride1+", "+stride2+", 1)));\n        "+getUniformSampler(inputInfo)+"\n      }\n    "}var flatOffset=inputInfo.shapeInfo.flatOffset;var texShape=inputInfo.shapeInfo.texShape;var texNumR=texShape[0];var texNumC=texShape[1];var stride2Str="int stride2 = "+texName+"Shape[3];";var stride1Str="int stride1 = "+texName+"Shape[2] * stride2;";var stride0Str="int stride0 = "+texName+"Shape[1] * stride1;";if(texNumC===stride0&&flatOffset==null){if(enableShapeUniforms){return"\n      float "+funcName+"(int row, int col, int depth, int depth2) {\n        "+stride2Str+"\n        "+stride1Str+"\n        float texR = float(row);\n        float texC =\n            dot(vec3(col, depth, depth2),\n                vec3(stride1, stride2, 1));\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                   vec2("+texName+"TexShape[1], "+texName+"TexShape[0]);\n        return sampleTexture("+texName+", uv);\n      }\n    "}return"\n      float "+funcName+"(int row, int col, int depth, int depth2) {\n        float texR = float(row);\n        float texC =\n            dot(vec3(col, depth, depth2),\n                vec3("+stride1+", "+stride2+", 1));\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                   vec2("+texNumC+".0, "+texNumR+".0);\n        return sampleTexture("+texName+", uv);\n      }\n    "}if(texNumC===stride2&&flatOffset==null){if(enableShapeUniforms){return"\n      float "+funcName+"(int row, int col, int depth, int depth2) {\n        float texR = dot(vec3(row, col, depth),\n                         vec3("+texName+"Shape[1] * "+texName+"Shape[2], "+texName+"Shape[2], 1));\n        float texC = float(depth2);\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                  vec2("+texName+"TexShape[1], "+texName+"TexShape[0]);\n        return sampleTexture("+texName+", uv);\n      }\n    "}return"\n      float "+funcName+"(int row, int col, int depth, int depth2) {\n        float texR = dot(vec3(row, col, depth),\n                         vec3("+shape[1]*shape[2]+", "+shape[2]+", 1));\n        float texC = float(depth2);\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                  vec2("+texNumC+".0, "+texNumR+".0);\n        return sampleTexture("+texName+", uv);\n      }\n    "}var offset=getFlatOffsetUniformName(texName);if(enableShapeUniforms){return"\n    float "+funcName+"(int row, int col, int depth, int depth2) {\n      // Explicitly use integer operations as dot() only works on floats.\n      "+stride2Str+"\n      "+stride1Str+"\n      "+stride0Str+"\n      int index = row * stride0 + col * stride1 +\n          depth * stride2 + depth2;\n      vec2 uv = uvFromFlat("+texName+"TexShape[0], "+texName+"TexShape[1], index + "+offset+");\n      return sampleTexture("+texName+", uv);\n    }\n  "}return"\n    float "+funcName+"(int row, int col, int depth, int depth2) {\n      // Explicitly use integer operations as dot() only works on floats.\n      int index = row * "+stride0+" + col * "+stride1+" +\n          depth * "+stride2+" + depth2;\n      vec2 uv = uvFromFlat("+texNumR+", "+texNumC+", index + "+offset+");\n      return sampleTexture("+texName+", uv);\n    }\n  "}function getSampler5D(inputInfo){var shape=inputInfo.shapeInfo.logicalShape;var texName=inputInfo.name;var funcName="get"+texName.charAt(0).toUpperCase()+texName.slice(1);var stride3=shape[4];var stride2=shape[3]*stride3;var stride1=shape[2]*stride2;var stride0=shape[1]*stride1;var _a=tf.util.squeezeShape(shape),newShape=_a.newShape,keptDims=_a.keptDims;if(newShape.length<shape.length){var newInputInfo=squeezeInputInfo(inputInfo,newShape);var params=["row","col","depth","depth2","depth3"];return"\n      "+getSamplerFromInInfo(newInputInfo)+"\n      float "+funcName+"(int row, int col, int depth, int depth2, int depth3) {\n        return "+funcName+"("+getSqueezedParams(params,keptDims)+");\n      }\n    "}if(inputInfo.shapeInfo.isUniform){return"\n      float "+funcName+"(int row, int col, int depth, int depth2, int depth3) {\n        float index = dot(\n          vec4(row, col, depth, depth2),\n          vec4("+stride0+", "+stride1+", "+stride2+", "+stride3+")) +\n          depth3;\n        "+getUniformSampler(inputInfo)+"\n      }\n    "}var flatOffset=inputInfo.shapeInfo.flatOffset;var texShape=inputInfo.shapeInfo.texShape;var texNumR=texShape[0];var texNumC=texShape[1];if(texNumC===stride0&&flatOffset==null){return"\n      float "+funcName+"(int row, int col, int depth, int depth2, int depth3) {\n        int texR = row;\n        float texC = dot(vec4(col, depth, depth2, depth3),\n                         vec4("+stride1+", "+stride2+", "+stride3+", 1));\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                   vec2("+texNumC+".0, "+texNumR+".0);\n        return sampleTexture("+texName+", uv);\n      }\n    "}if(texNumC===stride3&&flatOffset==null){return"\n      float "+funcName+"(int row, int col, int depth, int depth2, int depth3) {\n        float texR = dot(\n          vec4(row, col, depth, depth2),\n          vec4("+shape[1]*shape[2]*shape[3]+",\n               "+shape[2]*shape[3]+", "+shape[3]+", 1));\n        int texC = depth3;\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                  vec2("+texNumC+".0, "+texNumR+".0);\n        return sampleTexture("+texName+", uv);\n      }\n    "}var offset=getFlatOffsetUniformName(texName);return"\n    float "+funcName+"(int row, int col, int depth, int depth2, int depth3) {\n      // Explicitly use integer operations as dot() only works on floats.\n      int index = row * "+stride0+" + col * "+stride1+" + depth * "+stride2+" +\n          depth2 * "+stride3+" + depth3 + "+offset+";\n      vec2 uv = uvFromFlat("+texNumR+", "+texNumC+", index);\n      return sampleTexture("+texName+", uv);\n    }\n  "}function getSampler6D(inputInfo){var shape=inputInfo.shapeInfo.logicalShape;var texName=inputInfo.name;var funcName="get"+texName.charAt(0).toUpperCase()+texName.slice(1);var _a=tf.util.squeezeShape(shape),newShape=_a.newShape,keptDims=_a.keptDims;if(newShape.length<shape.length){var newInputInfo=squeezeInputInfo(inputInfo,newShape);var params=["row","col","depth","depth2","depth3","depth4"];return"\n      "+getSamplerFromInInfo(newInputInfo)+"\n      float "+funcName+"(int row, int col, int depth,\n                    int depth2, int depth3, int depth4) {\n        return "+funcName+"("+getSqueezedParams(params,keptDims)+");\n      }\n    "}var stride4=shape[5];var stride3=shape[4]*stride4;var stride2=shape[3]*stride3;var stride1=shape[2]*stride2;var stride0=shape[1]*stride1;if(inputInfo.shapeInfo.isUniform){return"\n      float "+funcName+"(int row, int col, int depth,\n                  int depth2, int depth3, int depth4) {\n        int index = round(dot(\n          vec4(row, col, depth, depth2),\n          vec4("+stride0+", "+stride1+", "+stride2+", "+stride3+")) +\n          dot(\n            vec2(depth3, depth4),\n            vec2("+stride4+", 1)));\n        "+getUniformSampler(inputInfo)+"\n      }\n    "}var flatOffset=inputInfo.shapeInfo.flatOffset;var texShape=inputInfo.shapeInfo.texShape;var texNumR=texShape[0];var texNumC=texShape[1];if(texNumC===stride0&&flatOffset==null){return"\n      float "+funcName+"(int row, int col, int depth,\n                    int depth2, int depth3, int depth4) {\n        int texR = row;\n        float texC = dot(vec4(col, depth, depth2, depth3),\n          vec4("+stride1+", "+stride2+", "+stride3+", "+stride4+")) +\n               float(depth4);\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                   vec2("+texNumC+".0, "+texNumR+".0);\n        return sampleTexture("+texName+", uv);\n      }\n    "}if(texNumC===stride4&&flatOffset==null){return"\n      float "+funcName+"(int row, int col, int depth,\n                    int depth2, int depth3, int depth4) {\n        float texR = dot(vec4(row, col, depth, depth2),\n          vec4("+shape[1]*shape[2]*shape[3]*shape[4]+",\n               "+shape[2]*shape[3]*shape[4]+",\n               "+shape[3]*shape[4]+",\n               "+shape[4]+")) + float(depth3);\n        int texC = depth4;\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                  vec2("+texNumC+".0, "+texNumR+".0);\n        return sampleTexture("+texName+", uv);\n      }\n    "}var offset=getFlatOffsetUniformName(texName);return"\n    float "+funcName+"(int row, int col, int depth,\n                  int depth2, int depth3, int depth4) {\n      // Explicitly use integer operations as dot() only works on floats.\n      int index = row * "+stride0+" + col * "+stride1+" + depth * "+stride2+" +\n          depth2 * "+stride3+" + depth3 * "+stride4+" + depth4 + "+offset+";\n      vec2 uv = uvFromFlat("+texNumR+", "+texNumC+", index);\n      return sampleTexture("+texName+", uv);\n    }\n  "}function getUniformSampler(inputInfo){var texName=inputInfo.name;var inSize=tf.util.sizeFromShape(inputInfo.shapeInfo.logicalShape);if(inSize<2){return"return "+texName+";"}return"\n    for (int i = 0; i < "+inSize+"; i++) {\n      if (i == index) {\n        return "+texName+"[i];\n      }\n    }\n  "}function getPackedSamplerAtOutputCoords(inputInfo,outShapeInfo){var texName=inputInfo.name;var texFuncSnippet=texName.charAt(0).toUpperCase()+texName.slice(1);var funcName="get"+texFuncSnippet+"AtOutCoords";var inRank=inputInfo.shapeInfo.logicalShape.length;var outRank=outShapeInfo.logicalShape.length;var broadcastDims=getBroadcastDims(inputInfo.shapeInfo.logicalShape,outShapeInfo.logicalShape);var type=getCoordsDataType(outRank);var rankDiff=outRank-inRank;var coordsSnippet;var fields=["x","y","z","w","u","v"];if(inRank===0){coordsSnippet=""}else if(outRank<2&&broadcastDims.length>=1){coordsSnippet="coords = 0;"}else{coordsSnippet=broadcastDims.map(function(d){return"coords."+fields[d+rankDiff]+" = 0;"}).join("\n")}var unpackedCoordsSnippet="";if(outRank<2&&inRank>0){unpackedCoordsSnippet="coords"}else{unpackedCoordsSnippet=inputInfo.shapeInfo.logicalShape.map(function(s,i){return"coords."+fields[i+rankDiff]}).join(", ")}var output="return outputValue;";var inSize=tf.util.sizeFromShape(inputInfo.shapeInfo.logicalShape);var isInputScalar=inSize===1;var outSize=tf.util.sizeFromShape(outShapeInfo.logicalShape);var isOutputScalar=outSize===1;if(inRank===1&&!isInputScalar&&!isOutputScalar){output="\n      return vec4(outputValue.xy, outputValue.xy);\n    "}else if(isInputScalar&&!isOutputScalar){if(outRank===1){output="\n        return vec4(outputValue.x, outputValue.x, 0., 0.);\n      "}else{output="\n        return vec4(outputValue.x);\n      "}}else if(broadcastDims.length){var rows=inRank-2;var cols=inRank-1;if(broadcastDims.indexOf(rows)>-1&&broadcastDims.indexOf(cols)>-1){output="return vec4(outputValue.x);"}else if(broadcastDims.indexOf(rows)>-1){output="return vec4(outputValue.x, outputValue.y, "+"outputValue.x, outputValue.y);"}else if(broadcastDims.indexOf(cols)>-1){output="return vec4(outputValue.xx, outputValue.zz);"}}return"\n    vec4 "+funcName+"() {\n      "+type+" coords = getOutputCoords();\n      "+coordsSnippet+"\n      vec4 outputValue = get"+texFuncSnippet+"("+unpackedCoordsSnippet+");\n      "+output+"\n    }\n  "}function getSamplerAtOutputCoords(inputInfo,outShapeInfo){var texName=inputInfo.name;var texFuncSnippet=texName.charAt(0).toUpperCase()+texName.slice(1);var funcName="get"+texFuncSnippet+"AtOutCoords";var outTexShape=outShapeInfo.texShape;var inTexShape=inputInfo.shapeInfo.texShape;var inRank=inputInfo.shapeInfo.logicalShape.length;var outRank=outShapeInfo.logicalShape.length;if(!inputInfo.shapeInfo.isUniform&&inRank===outRank&&inputInfo.shapeInfo.flatOffset==null&&tf.util.arraysEqual(inTexShape,outTexShape)){return"\n      float "+funcName+"() {\n        return sampleTexture("+texName+", resultUV);\n      }\n    "}var type=getCoordsDataType(outRank);var broadcastDims=getBroadcastDims(inputInfo.shapeInfo.logicalShape,outShapeInfo.logicalShape);var rankDiff=outRank-inRank;var coordsSnippet;var fields=["x","y","z","w","u","v"];if(inRank===0){coordsSnippet=""}else if(outRank<2&&broadcastDims.length>=1){coordsSnippet="coords = 0;"}else{coordsSnippet=broadcastDims.map(function(d){return"coords."+fields[d+rankDiff]+" = 0;"}).join("\n")}var unpackedCoordsSnippet="";if(outRank<2&&inRank>0){unpackedCoordsSnippet="coords"}else{unpackedCoordsSnippet=inputInfo.shapeInfo.logicalShape.map(function(s,i){return"coords."+fields[i+rankDiff]}).join(", ")}return"\n    float "+funcName+"() {\n      "+type+" coords = getOutputCoords();\n      "+coordsSnippet+"\n      return get"+texFuncSnippet+"("+unpackedCoordsSnippet+");\n    }\n  "}function getCoordsDataType(rank){if(rank<=1){return"int"}else if(rank===2){return"ivec2"}else if(rank===3){return"ivec3"}else if(rank===4){return"ivec4"}else if(rank===5){return"ivec5"}else if(rank===6){return"ivec6"}else{throw Error("GPU for rank "+rank+" is not yet supported")}}function getUniformInfoFromShape(isPacked,shape,texShape){var _a=tf.util.squeezeShape(shape),newShape=_a.newShape,keptDims=_a.keptDims;var rank=shape.length;var useSqueezePackedShape=isPacked&&rank===3&&shape[0]===1;var squeezeShape=useSqueezePackedShape?shape.slice(1):newShape;var useSqueezeShape=!isPacked&&rank>1&&!tf.util.arraysEqual(shape,texShape)&&newShape.length<rank||useSqueezePackedShape;var uniformShape=useSqueezeShape?squeezeShape:shape;return{useSqueezeShape:useSqueezeShape,uniformShape:uniformShape,keptDims:keptDims}}function squeezeInputInfo(inInfo,squeezedShape){var newInputInfo=JSON.parse(JSON.stringify(inInfo));newInputInfo.shapeInfo.logicalShape=squeezedShape;return newInputInfo}function getSqueezedParams(params,keptDims){return keptDims.map(function(d){return params[d]}).join(", ")}function compileProgram(gpgpu,program,inputs,output){var inputInfos=inputs.map(function(input,i){var shapeInfo={logicalShape:input.shape,texShape:input.isUniform?null:input.texData.texShape,isUniform:input.isUniform,isPacked:input.isUniform?false:input.texData.isPacked,flatOffset:null};if(input.texData!=null&&input.texData.slice!=null&&input.texData.slice.flatOffset>0){shapeInfo.flatOffset=input.texData.slice.flatOffset}return{name:program.variableNames[i],shapeInfo:shapeInfo}});var inShapeInfos=inputInfos.map(function(x){return x.shapeInfo});var outShapeInfo={logicalShape:output.shape,texShape:output.texData.texShape,isUniform:false,isPacked:output.texData.isPacked,flatOffset:null};var source=makeShader(inputInfos,outShapeInfo,program);var webGLProgram=gpgpu.createProgram(source);var infLoc=null;var nanLoc=gpgpu.getUniformLocation(webGLProgram,"NAN",false);if(tf.env().getNumber("WEBGL_VERSION")===1){infLoc=gpgpu.getUniformLocation(webGLProgram,"INFINITY",false)}var shouldThrow=false;var uniformLocations={};var inShapesLocations={};var inTexShapesLocations={};for(var i=0;i<program.variableNames.length;i++){var varName=program.variableNames[i];uniformLocations[varName]=gpgpu.getUniformLocation(webGLProgram,varName,shouldThrow);uniformLocations["offset"+varName]=gpgpu.getUniformLocation(webGLProgram,"offset"+varName,shouldThrow);if(program.enableShapeUniforms){inShapesLocations[varName+"Shape"]=gpgpu.getUniformLocation(webGLProgram,varName+"Shape",shouldThrow);inTexShapesLocations[varName+"TexShape"]=gpgpu.getUniformLocation(webGLProgram,varName+"TexShape",shouldThrow)}}var outShapeLocation;var outTexShapeLocation;var outShapeStridesLocation;if(program.enableShapeUniforms){outShapeLocation=gpgpu.getUniformLocation(webGLProgram,"outShape",shouldThrow);outShapeStridesLocation=gpgpu.getUniformLocation(webGLProgram,"outShapeStrides",shouldThrow);outTexShapeLocation=gpgpu.getUniformLocation(webGLProgram,"outTexShape",shouldThrow)}var customUniformLocations=[];if(program.customUniforms){program.customUniforms.forEach(function(d,i){customUniformLocations[i]=gpgpu.getUniformLocation(webGLProgram,d.name,shouldThrow)})}return{program:program,source:source,webGLProgram:webGLProgram,uniformLocations:uniformLocations,customUniformLocations:customUniformLocations,inShapeInfos:inShapeInfos,outShapeInfo:outShapeInfo,infLoc:infLoc,nanLoc:nanLoc,inShapesLocations:inShapesLocations,inTexShapesLocations:inTexShapesLocations,outShapeLocation:outShapeLocation,outShapeStridesLocation:outShapeStridesLocation,outTexShapeLocation:outTexShapeLocation}}function validateBinaryAndProgram(shapeInfos,inputs){if(shapeInfos.length!==inputs.length){throw Error("Binary was compiled with "+shapeInfos.length+" inputs, but "+("was executed with "+inputs.length+" inputs"))}shapeInfos.forEach(function(s,i){var shapeA=s.logicalShape;var input=inputs[i];var shapeB=input.shape;if(!tf.util.arraysEqual(shapeA,shapeB)){throw Error("Binary was compiled with different shapes than "+("the current args. Shapes "+shapeA+" and "+shapeB+" must match"))}if(s.isUniform&&input.isUniform){return}var texShapeA=s.texShape;var texShapeB=input.isUniform?null:input.texData.texShape;if(!tf.util.arraysEqual(texShapeA,texShapeB)){throw Error("Binary was compiled with different texture shapes than the"+(" current args. Shape "+texShapeA+" and "+texShapeB+" must match"))}})}function runProgram(gpgpu,binary,inputs,output,customUniformValues){if(!binary.program.enableShapeUniforms){validateBinaryAndProgram(binary.inShapeInfos,inputs);validateBinaryAndProgram([binary.outShapeInfo],[output])}var outTex=output.texData.texture;var outTexShape=output.texData.texShape;if(output.texData.isPacked){gpgpu.setOutputPackedMatrixTexture(outTex,outTexShape[0],outTexShape[1])}else{gpgpu.setOutputMatrixTexture(outTex,outTexShape[0],outTexShape[1])}gpgpu.setProgram(binary.webGLProgram);if(tf.env().getNumber("WEBGL_VERSION")===1){if(binary.infLoc!==null){gpgpu.gl.uniform1f(binary.infLoc,Infinity)}}if(binary.nanLoc!==null){gpgpu.gl.uniform1f(binary.nanLoc,NaN)}inputs.forEach(function(input,i){var varName=binary.program.variableNames[i];var varLoc=binary.uniformLocations[varName];var varOffsetLoc=binary.uniformLocations["offset"+varName];var varShapeLoc=binary.inShapesLocations[varName+"Shape"];var varTexShapeLoc=binary.inTexShapesLocations[varName+"TexShape"];if(varShapeLoc){var uniformShape=getUniformInfoFromShape(binary.program.packedInputs,input.shape,input.texData.texShape).uniformShape;switch(uniformShape.length){case 1:gpgpu.gl.uniform1iv(varShapeLoc,new Int32Array(uniformShape));break;case 2:gpgpu.gl.uniform2iv(varShapeLoc,new Int32Array(uniformShape));break;case 3:gpgpu.gl.uniform3iv(varShapeLoc,new Int32Array(uniformShape));break;case 4:gpgpu.gl.uniform4iv(varShapeLoc,new Int32Array(uniformShape));break}}if(varTexShapeLoc){gpgpu.gl.uniform2i(varTexShapeLoc,input.texData.texShape[0],input.texData.texShape[1])}if(varLoc==null){return}if(input.isUniform){if(tf.util.sizeFromShape(input.shape)<2){gpgpu.gl.uniform1f(varLoc,input.uniformValues[0])}else{var vals=input.uniformValues;if(!(vals instanceof Float32Array)){vals=new Float32Array(vals)}gpgpu.gl.uniform1fv(varLoc,vals)}return}if(input.texData.slice!=null&&varOffsetLoc!=null){gpgpu.gl.uniform1i(varOffsetLoc,input.texData.slice.flatOffset)}gpgpu.setInputMatrixTexture(input.texData.texture,varLoc,i)});var outShapeLoc=binary.outShapeLocation;if(outShapeLoc){switch(output.shape.length){case 1:gpgpu.gl.uniform1iv(outShapeLoc,new Int32Array(output.shape));break;case 2:gpgpu.gl.uniform2iv(outShapeLoc,new Int32Array(output.shape));break;case 3:gpgpu.gl.uniform3iv(outShapeLoc,new Int32Array(output.shape));break;case 4:gpgpu.gl.uniform4iv(outShapeLoc,new Int32Array(output.shape));break}}if(binary.outShapeStridesLocation){var strides=tf.util.computeStrides(output.shape);switch(output.shape.length){case 2:gpgpu.gl.uniform1iv(binary.outShapeStridesLocation,new Int32Array(strides));break;case 3:gpgpu.gl.uniform2iv(binary.outShapeStridesLocation,new Int32Array(strides));break;case 4:gpgpu.gl.uniform3iv(binary.outShapeStridesLocation,new Int32Array(strides));break}}if(binary.outTexShapeLocation){gpgpu.gl.uniform2i(binary.outTexShapeLocation,output.texData.texShape[0],output.texData.texShape[1])}if(binary.program.customUniforms&&customUniformValues){binary.program.customUniforms.forEach(function(d,i){var customLoc=binary.customUniformLocations[i];var customValue=customUniformValues[i];if(d.type==="float"){gpgpu.gl.uniform1fv(customLoc,customValue)}else if(d.type==="vec2"){gpgpu.gl.uniform2fv(customLoc,customValue)}else if(d.type==="vec3"){gpgpu.gl.uniform3fv(customLoc,customValue)}else if(d.type==="vec4"){gpgpu.gl.uniform4fv(customLoc,customValue)}else if(d.type==="int"){gpgpu.gl.uniform1iv(customLoc,customValue)}else if(d.type==="ivec2"){gpgpu.gl.uniform2iv(customLoc,customValue)}else if(d.type==="ivec3"){gpgpu.gl.uniform3iv(customLoc,customValue)}else if(d.type==="ivec4"){gpgpu.gl.uniform4iv(customLoc,customValue)}else{throw Error("uniform type "+d.type+" is not supported yet.")}})}gpgpu.executeProgram()}function makeShaderKey(program,inputs,output){var keyInputs="";inputs.concat(output).forEach(function(x){var hasOffset=x.texData!=null&&x.texData.slice!=null&&x.texData.slice.flatOffset>0;if(program.enableShapeUniforms&&!x.isUniform){var xTexShape=x.texData.texShape;var _a=getUniformInfoFromShape(program.packedInputs,x.shape,xTexShape),useSqueezeShape=_a.useSqueezeShape,uniformShape=_a.uniformShape,keptDims=_a.keptDims;var rank1="",rank2="",rank34="";if(uniformShape.length===1&&program.packedInputs){var packedTexShape=[Math.ceil(xTexShape[0]/2),Math.ceil(xTexShape[1]/2)];rank1=(packedTexShape[0]>1)+"_"+(packedTexShape[1]>1)}else if(uniformShape.length===2&&!program.packedInputs){rank2=(uniformShape[0]>1)+"_"+(uniformShape[1]>1)}else if(uniformShape.length>2&&!program.packedInputs){var strides=tf.util.computeStrides(uniformShape);rank34=(strides[0]===xTexShape[1])+"_"+(strides[strides.length-1]===xTexShape[1])}var xRank=x.shape.length;var isLogicalShapTexShapeEqual=uniformShape.length===2&&tf.util.arraysEqual(x.shape,xTexShape);var isScalar=tf.util.sizeFromShape(x.shape)===1;var broadcastDims=tf.backend_util.getBroadcastDims(x.shape,output.shape);var isInOutTexShapeEqual=!program.packedInputs&&xRank===output.shape.length&&tf.util.arraysEqual(xTexShape,output.texData.texShape);var isTexShapeGreaterThanOne=program.packedInputs||uniformShape.length>2?"":(xTexShape[0]>1)+"_"+(xTexShape[1]>1);keyInputs+=xRank+"_"+isInOutTexShapeEqual+"_"+(useSqueezeShape?keptDims:"")+"_"+uniformShape.length+"_"+isScalar+"_"+broadcastDims+"_"+isLogicalShapTexShapeEqual+"_"+rank1+"_"+rank2+"_"+rank34+"_"+isTexShapeGreaterThanOne+"_"+hasOffset}else{var texShape=x.isUniform?"uniform":x.texData.texShape;keyInputs+=x.shape+"_"+texShape+"_"+hasOffset}});var keyUserCode=program.userCode;var key=program.constructor.name;key+="_"+keyInputs+"_"+keyUserCode+(""+tf.env().getNumber("WEBGL_VERSION"));return key}function useShapeUniforms(rank){return tf.env().getBool("WEBGL_USE_SHAPES_UNIFORMS")&&rank<=4}var DecodeMatrixProgram=function(){function DecodeMatrixProgram(outputShape){this.variableNames=["A"];this.packedInputs=false;this.packedOutput=true;this.outPackingScheme=PackingScheme.DENSE;this.customUniforms=[{name:"texShape",type:"ivec2"}];var glsl=getGlslDifferences();this.outputShape=outputShape;this.enableShapeUniforms=useShapeUniforms(this.outputShape.length);this.userCode="\n      ivec3 outCoordsFromFlatIndex(int index) {\n        "+(this.enableShapeUniforms?getOutputLogicalCoordinatesFromFlatIndexByUniform(["r","c","d"],outputShape):getLogicalCoordinatesFromFlatIndex(["r","c","d"],outputShape))+"\n        return ivec3(r, c, d);\n      }\n\n      void main() {\n        ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1]));\n        int index = 4 * (resTexRC.x * texShape[1] + resTexRC.y);\n\n        vec4 result = vec4(0.);\n\n        for (int i=0; i<4; i++) {\n          int flatIndex = index + i;\n          ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n          result[i] = getA(rc.x, rc.y, rc.z);\n        }\n\n        "+glsl.output+" = result;\n      }\n    "}return DecodeMatrixProgram}();var DecodeMatrixPackedProgram=function(){function DecodeMatrixPackedProgram(outputShape){this.variableNames=["A"];this.packedInputs=true;this.packedOutput=true;this.outPackingScheme=PackingScheme.DENSE;this.customUniforms=[{name:"texShape",type:"ivec2"}];var glsl=getGlslDifferences();this.outputShape=outputShape;this.enableShapeUniforms=useShapeUniforms(this.outputShape.length);this.userCode="\n      ivec3 outCoordsFromFlatIndex(int index) {\n        "+(this.enableShapeUniforms?getOutputLogicalCoordinatesFromFlatIndexByUniform(["r","c","d"],outputShape):getLogicalCoordinatesFromFlatIndex(["r","c","d"],outputShape))+"\n        return ivec3(r, c, d);\n      }\n\n      void main() {\n        ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1]));\n        int index = 4 * (resTexRC.x * texShape[1] + resTexRC.y);\n\n        vec4 result = vec4(0.);\n\n        for (int i=0; i<4; i++) {\n          int flatIndex = index + i;\n          ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n          result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z));\n        }\n\n        "+glsl.output+" = result;\n      }\n    "}return DecodeMatrixPackedProgram}();var EncodeFloatProgram=function(){function EncodeFloatProgram(outputShape){this.variableNames=["A"];this.outTexUsage=TextureUsage.DOWNLOAD;var glsl=getGlslDifferences();this.outputShape=outputShape;this.userCode="\n      "+ENCODE_FLOAT_SNIPPET+"\n\n      void main() {\n        float x = getAAtOutCoords();\n        "+glsl.output+" = encode_float(x);\n      }\n    "}return EncodeFloatProgram}();var EncodeFloatPackedProgram=function(){function EncodeFloatPackedProgram(outputShape){this.variableNames=["A"];this.packedInputs=true;this.packedOutput=false;this.outTexUsage=TextureUsage.DOWNLOAD;var glsl=getGlslDifferences();this.outputShape=outputShape;this.userCode="\n      "+ENCODE_FLOAT_SNIPPET+"\n\n      void main() {\n        ivec3 coords = getOutputCoords();\n        float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));\n        "+glsl.output+" = encode_float(x);\n      }\n    "}return EncodeFloatPackedProgram}();var EncodeMatrixProgram=function(){function EncodeMatrixProgram(outputShape,inputIsUnsignedByte){if(inputIsUnsignedByte===void 0){inputIsUnsignedByte=false}this.variableNames=["A"];this.customUniforms=[{name:"texShape",type:"ivec2"}];var glsl=getGlslDifferences();this.outputShape=outputShape;this.enableShapeUniforms=useShapeUniforms(this.outputShape.length);var output="result";if(inputIsUnsignedByte){output="floor(result * 255. + 0.5)"}this.userCode="\n      "+(this.enableShapeUniforms?getFlatIndexFrom3DOutput():getFlatIndexFrom3D(outputShape))+"\n\n      void main() {\n        ivec3 coords = getOutputCoords();\n\n        int flatIndex = getFlatIndex(coords);\n        int offset = imod(flatIndex, 4);\n\n        flatIndex = idiv(flatIndex, 4, 1.);\n\n        int r = flatIndex / texShape[1];\n        int c = imod(flatIndex, texShape[1]);\n        vec2 uv = (vec2(c, r) + halfCR) / vec2(texShape[1], texShape[0]);\n        vec4 values = "+glsl.texture2D+"(A, uv);\n\n        float result;\n\n        if(offset == 0) {\n          result = values[0];\n        } else if(offset == 1) {\n          result = values[1];\n        } else if(offset == 2) {\n          result = values[2];\n        } else {\n          result = values[3];\n        }\n\n        "+glsl.output+" = vec4("+output+", 0., 0., 0.);\n      }\n    "}return EncodeMatrixProgram}();var EncodeMatrixPackedProgram=function(){function EncodeMatrixPackedProgram(outputShape,inputIsUnsignedByte){if(inputIsUnsignedByte===void 0){inputIsUnsignedByte=false}this.variableNames=["A"];this.packedInputs=false;this.packedOutput=true;this.customUniforms=[{name:"texShape",type:"ivec2"}];var glsl=getGlslDifferences();this.outputShape=outputShape;this.enableShapeUniforms=useShapeUniforms(this.outputShape.length);var mainLoop="";var output="result";if(inputIsUnsignedByte){output="floor(result * 255. + 0.5)"}for(var row=0;row<=1;row++){for(var col=0;col<=1;col++){var channel=row*2+col;mainLoop+="\n          localCoords = coords;\n          if(localCoords[2] + "+col+" < "+(this.enableShapeUniforms?"outShape[2]":""+outputShape[2])+") {\n          localCoords[2] += "+col+";\n          if (localCoords[1] + "+row+" < "+(this.enableShapeUniforms?"outShape[1]":""+outputShape[1])+") {\n            localCoords[1] += "+row+";\n\n            flatIndex = getFlatIndex(localCoords);\n            offset = imod(flatIndex, 4);\n\n            flatIndex = idiv(flatIndex, 4, 1.);\n\n            int r = flatIndex / texShape[1];\n            int c = imod(flatIndex, texShape[1]);\n            vec2 uv = (vec2(c, r) + halfCR) / vec2(texShape[1], texShape[0]);\n            values = "+glsl.texture2D+"(A, uv);\n\n            if (offset == 0) {\n              result["+channel+"] = values[0];\n            } else if (offset == 1) {\n              result["+channel+"] = values[1];\n            } else if (offset == 2) {\n              result["+channel+"] = values[2];\n            } else {\n              result["+channel+"] = values[3];\n            }\n          }\n        }\n        "}}this.userCode="\n        "+(this.enableShapeUniforms?getFlatIndexFrom3DOutput():getFlatIndexFrom3D(outputShape))+"\n\n        void main() {\n          ivec3 coords = getOutputCoords();\n\n          vec4 result = vec4(0.);\n          int flatIndex, r, c, offset;\n          ivec3 localCoords;\n          vec2 uv;\n          vec4 values;\n\n          "+mainLoop+"\n\n          "+glsl.output+" = "+output+";\n        }\n    "}return EncodeMatrixPackedProgram}();function createVertexShader(gl){var glsl=getGlslDifferences();var vertexShaderSource=glsl.version+"\n    precision highp float;\n    "+glsl.attribute+" vec3 clipSpacePos;\n    "+glsl.attribute+" vec2 uv;\n    "+glsl.varyingVs+" vec2 resultUV;\n\n    void main() {\n      gl_Position = vec4(clipSpacePos, 1);\n      resultUV = uv;\n    }";return createVertexShader$1(gl,vertexShaderSource)}function createVertexBuffer(gl){var vertexArray=new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]);return createStaticVertexBuffer(gl,vertexArray)}function createIndexBuffer(gl){var triangleVertexIndices=new Uint16Array([0,1,2,2,1,3]);return createStaticIndexBuffer(gl,triangleVertexIndices)}function createAndConfigureTexture(gl,width,height,internalFormat,textureFormat,textureType){validateTextureSize(width,height);var texture=createTexture(gl);var tex2d=gl.TEXTURE_2D;callAndCheck(gl,function(){return gl.bindTexture(tex2d,texture)});callAndCheck(gl,function(){return gl.texParameteri(tex2d,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE)});callAndCheck(gl,function(){return gl.texParameteri(tex2d,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE)});callAndCheck(gl,function(){return gl.texParameteri(tex2d,gl.TEXTURE_MIN_FILTER,gl.NEAREST)});callAndCheck(gl,function(){return gl.texParameteri(tex2d,gl.TEXTURE_MAG_FILTER,gl.NEAREST)});callAndCheck(gl,function(){return gl.texImage2D(tex2d,0,internalFormat,width,height,0,textureFormat,textureType,null)});callAndCheck(gl,function(){return gl.bindTexture(gl.TEXTURE_2D,null)});return texture}function getInternalFormatForFloat32MatrixTexture(textureConfig){return textureConfig.internalFormatFloat}function createFloat32MatrixTexture(gl,rows,columns,textureConfig){var _a=__read(getUnpackedMatrixTextureShapeWidthHeight(rows,columns),2),width=_a[0],height=_a[1];return createAndConfigureTexture(gl,width,height,getInternalFormatForFloat32MatrixTexture(textureConfig),textureConfig.textureFormatFloat,gl.FLOAT)}function getInternalFormatForFloat16MatrixTexture(textureConfig){return textureConfig.internalFormatHalfFloat}function createFloat16MatrixTexture(gl,rows,columns,textureConfig){var _a=__read(getUnpackedMatrixTextureShapeWidthHeight(rows,columns),2),width=_a[0],height=_a[1];return createAndConfigureTexture(gl,width,height,getInternalFormatForFloat16MatrixTexture(textureConfig),textureConfig.textureFormatFloat,textureConfig.textureTypeHalfFloat)}function getInternalFormatForUnsignedBytesMatrixTexture(textureConfig){return textureConfig.downloadTextureFormat}function createUnsignedBytesMatrixTexture(gl,rows,columns,textureConfig){var _a=__read(getUnpackedMatrixTextureShapeWidthHeight(rows,columns),2),width=_a[0],height=_a[1];return createAndConfigureTexture(gl,width,height,getInternalFormatForUnsignedBytesMatrixTexture(textureConfig),gl.RGBA,gl.UNSIGNED_BYTE)}function getInternalFormatForPackedMatrixTexture(textureConfig){return textureConfig.internalFormatPackedFloat}function createPackedMatrixTexture(gl,rows,columns,textureConfig){var _a=__read(getPackedMatrixTextureShapeWidthHeight(rows,columns),2),width=_a[0],height=_a[1];return createAndConfigureTexture(gl,width,height,getInternalFormatForPackedMatrixTexture(textureConfig),gl.RGBA,gl.FLOAT)}function getInternalFormatForFloat16PackedMatrixTexture(textureConfig){return textureConfig.internalFormatPackedHalfFloat}function createFloat16PackedMatrixTexture(gl,rows,columns,textureConfig){var _a=__read(getPackedMatrixTextureShapeWidthHeight(rows,columns),2),width=_a[0],height=_a[1];return createAndConfigureTexture(gl,width,height,getInternalFormatForFloat16PackedMatrixTexture(textureConfig),gl.RGBA,textureConfig.textureTypeHalfFloat)}function bindVertexProgramAttributeStreams(gl,program,vertexBuffer){var posOffset=0;var uvOffset=3*4;var stride=3*4+2*4;callAndCheck(gl,function(){return gl.bindBuffer(gl.ARRAY_BUFFER,vertexBuffer)});var success=bindVertexBufferToProgramAttribute(gl,program,"clipSpacePos",vertexBuffer,3,stride,posOffset);return success&&bindVertexBufferToProgramAttribute(gl,program,"uv",vertexBuffer,2,stride,uvOffset)}function uploadDenseMatrixToTexture(gl,texture,width,height,data,textureConfig){callAndCheck(gl,function(){return gl.bindTexture(gl.TEXTURE_2D,texture)});var dataForUpload,texelDataType,internalFormat;if(data instanceof Uint8Array){dataForUpload=new Uint8Array(width*height*4);texelDataType=gl.UNSIGNED_BYTE;internalFormat=gl.RGBA}else{dataForUpload=new Float32Array(width*height*4);texelDataType=gl.FLOAT;internalFormat=textureConfig.internalFormatPackedFloat}dataForUpload.set(data);callAndCheck(gl,function(){return gl.texImage2D(gl.TEXTURE_2D,0,internalFormat,width,height,0,gl.RGBA,texelDataType,dataForUpload)});callAndCheck(gl,function(){return gl.bindTexture(gl.TEXTURE_2D,null)})}function uploadPixelDataToTexture(gl,texture,pixels){callAndCheck(gl,function(){return gl.bindTexture(gl.TEXTURE_2D,texture)});if(pixels.data instanceof Uint8Array){callAndCheck(gl,function(){return gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,pixels.width,pixels.height,0,gl.RGBA,gl.UNSIGNED_BYTE,pixels.data)})}else{callAndCheck(gl,function(){return gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,pixels)})}callAndCheck(gl,function(){return gl.bindTexture(gl.TEXTURE_2D,null)})}function createBufferFromOutputTexture(gl2,rows,columns,textureConfig){var buffer=gl2.createBuffer();callAndCheck(gl2,function(){return gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER,buffer)});var bytesPerFloat=4;var valuesPerTexel=4;var bufferSizeBytes=bytesPerFloat*valuesPerTexel*rows*columns;callAndCheck(gl2,function(){return gl2.bufferData(gl2.PIXEL_PACK_BUFFER,bufferSizeBytes,gl2.STREAM_READ)});callAndCheck(gl2,function(){return gl2.readPixels(0,0,columns,rows,gl2.RGBA,gl2.FLOAT,0)});callAndCheck(gl2,function(){return gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER,null)});return buffer}function downloadFloat32MatrixFromBuffer(gl,buffer,size){var gl2=gl;var downloadTarget=new Float32Array(size);gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER,buffer);gl2.getBufferSubData(gl2.PIXEL_PACK_BUFFER,0,downloadTarget);gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER,null);return downloadTarget}function downloadByteEncodedFloatMatrixFromOutputTexture(gl,rows,columns,textureConfig){var _a=__read(getUnpackedMatrixTextureShapeWidthHeight(rows,columns),2),w=_a[0],h=_a[1];var numChannels=4;var downloadTarget=new Uint8Array(getUnpackedArraySizeFromMatrixSize(rows*columns,numChannels));callAndCheck(gl,function(){return gl.readPixels(0,0,w,h,textureConfig.downloadTextureFormat,gl.UNSIGNED_BYTE,downloadTarget)});return new Float32Array(downloadTarget.buffer)}function downloadPackedMatrixFromBuffer(gl,buffer,batch,rows,cols,physicalRows,physicalCols,textureConfig){var gl2=gl;var downloadTarget=new Float32Array(getPackedRGBAArraySizeFromMatrixShape(physicalRows,physicalCols));gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER,buffer);gl2.getBufferSubData(gl2.PIXEL_PACK_BUFFER,0,downloadTarget);gl2.bindBuffer(gl2.PIXEL_PACK_BUFFER,null);return downloadTarget}function downloadMatrixFromPackedOutputTexture(gl,physicalRows,physicalCols){var packedRGBA=new Float32Array(physicalRows*physicalCols*4);callAndCheck(gl,function(){return gl.readPixels(0,0,physicalCols,physicalRows,gl.RGBA,gl.FLOAT,packedRGBA)});return packedRGBA}var gpgpu_util={__proto__:null,createVertexShader:createVertexShader,createVertexBuffer:createVertexBuffer,createIndexBuffer:createIndexBuffer,getInternalFormatForFloat32MatrixTexture:getInternalFormatForFloat32MatrixTexture,createFloat32MatrixTexture:createFloat32MatrixTexture,getInternalFormatForFloat16MatrixTexture:getInternalFormatForFloat16MatrixTexture,createFloat16MatrixTexture:createFloat16MatrixTexture,getInternalFormatForUnsignedBytesMatrixTexture:getInternalFormatForUnsignedBytesMatrixTexture,createUnsignedBytesMatrixTexture:createUnsignedBytesMatrixTexture,getInternalFormatForPackedMatrixTexture:getInternalFormatForPackedMatrixTexture,createPackedMatrixTexture:createPackedMatrixTexture,getInternalFormatForFloat16PackedMatrixTexture:getInternalFormatForFloat16PackedMatrixTexture,createFloat16PackedMatrixTexture:createFloat16PackedMatrixTexture,bindVertexProgramAttributeStreams:bindVertexProgramAttributeStreams,uploadDenseMatrixToTexture:uploadDenseMatrixToTexture,uploadPixelDataToTexture:uploadPixelDataToTexture,createBufferFromOutputTexture:createBufferFromOutputTexture,downloadFloat32MatrixFromBuffer:downloadFloat32MatrixFromBuffer,downloadByteEncodedFloatMatrixFromOutputTexture:downloadByteEncodedFloatMatrixFromOutputTexture,downloadPackedMatrixFromBuffer:downloadPackedMatrixFromBuffer,downloadMatrixFromPackedOutputTexture:downloadMatrixFromPackedOutputTexture};var GPGPUContext=function(){function GPGPUContext(gl){this.outputTexture=null;this.program=null;this.disposed=false;this.vertexAttrsAreBound=false;this.itemsToPoll=[];var glVersion=tf.env().getNumber("WEBGL_VERSION");if(gl!=null){this.gl=gl;setWebGLContext(glVersion,gl)}else{this.gl=getWebGLContext(glVersion)}var COLOR_BUFFER_FLOAT="WEBGL_color_buffer_float";var COLOR_BUFFER_HALF_FLOAT="EXT_color_buffer_half_float";if(tf.env().getNumber("WEBGL_VERSION")===1){var TEXTURE_FLOAT="OES_texture_float";var TEXTURE_HALF_FLOAT="OES_texture_half_float";this.textureFloatExtension=getExtensionOrThrow(this.gl,TEXTURE_FLOAT);if(hasExtension(this.gl,TEXTURE_HALF_FLOAT)){this.textureHalfFloatExtension=getExtensionOrThrow(this.gl,TEXTURE_HALF_FLOAT)}else if(tf.env().get("WEBGL_FORCE_F16_TEXTURES")){throw new Error("GL context does not support half float textures, yet the "+"environment flag WEBGL_FORCE_F16_TEXTURES is set to true.")}this.colorBufferFloatExtension=this.gl.getExtension(COLOR_BUFFER_FLOAT);if(hasExtension(this.gl,COLOR_BUFFER_HALF_FLOAT)){this.colorBufferHalfFloatExtension=getExtensionOrThrow(this.gl,COLOR_BUFFER_HALF_FLOAT)}else if(tf.env().get("WEBGL_FORCE_F16_TEXTURES")){throw new Error("GL context does not support color renderable half floats, yet "+"the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.")}}else{COLOR_BUFFER_FLOAT="EXT_color_buffer_float";if(hasExtension(this.gl,COLOR_BUFFER_FLOAT)){this.colorBufferFloatExtension=this.gl.getExtension(COLOR_BUFFER_FLOAT)}else if(hasExtension(this.gl,COLOR_BUFFER_HALF_FLOAT)){this.colorBufferHalfFloatExtension=this.gl.getExtension(COLOR_BUFFER_HALF_FLOAT)}else{throw new Error("GL context does not support color renderable floats")}}this.vertexBuffer=createVertexBuffer(this.gl);this.indexBuffer=createIndexBuffer(this.gl);this.framebuffer=createFramebuffer(this.gl);this.textureConfig=getTextureConfig(this.gl,this.textureHalfFloatExtension)}Object.defineProperty(GPGPUContext.prototype,"debug",{get:function(){return tf.env().getBool("DEBUG")},enumerable:true,configurable:true});GPGPUContext.prototype.dispose=function(){var _this=this;if(this.disposed){return}if(this.program!=null){console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram."+" This is probably a resource leak, delete the program with "+"GPGPUContext.deleteProgram before disposing.")}if(this.outputTexture!=null){console.warn("Disposing a GPGPUContext that still has a bound output matrix "+"texture.  This is probably a resource leak, delete the output "+"matrix texture with GPGPUContext.deleteMatrixTexture before "+"disposing.")}var gl=this.gl;callAndCheck(gl,function(){return gl.finish()});callAndCheck(gl,function(){return gl.bindFramebuffer(gl.FRAMEBUFFER,null)});callAndCheck(gl,function(){return gl.deleteFramebuffer(_this.framebuffer)});callAndCheck(gl,function(){return gl.bindBuffer(gl.ARRAY_BUFFER,null)});callAndCheck(gl,function(){return gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,null)});callAndCheck(gl,function(){return gl.deleteBuffer(_this.indexBuffer)});this.disposed=true};GPGPUContext.prototype.createFloat32MatrixTexture=function(rows,columns){this.throwIfDisposed();return createFloat32MatrixTexture(this.gl,rows,columns,this.textureConfig)};GPGPUContext.prototype.createFloat16MatrixTexture=function(rows,columns){this.throwIfDisposed();return createFloat16MatrixTexture(this.gl,rows,columns,this.textureConfig)};GPGPUContext.prototype.createUnsignedBytesMatrixTexture=function(rows,columns){this.throwIfDisposed();return createUnsignedBytesMatrixTexture(this.gl,rows,columns,this.textureConfig)};GPGPUContext.prototype.uploadPixelDataToTexture=function(texture,pixels){this.throwIfDisposed();uploadPixelDataToTexture(this.gl,texture,pixels)};GPGPUContext.prototype.uploadDenseMatrixToTexture=function(texture,width,height,data){this.throwIfDisposed();uploadDenseMatrixToTexture(this.gl,texture,width,height,data,this.textureConfig)};GPGPUContext.prototype.createFloat16PackedMatrixTexture=function(rows,columns){this.throwIfDisposed();return createFloat16PackedMatrixTexture(this.gl,rows,columns,this.textureConfig)};GPGPUContext.prototype.createPackedMatrixTexture=function(rows,columns){this.throwIfDisposed();return createPackedMatrixTexture(this.gl,rows,columns,this.textureConfig)};GPGPUContext.prototype.deleteMatrixTexture=function(texture){var _this=this;this.throwIfDisposed();if(this.outputTexture===texture){unbindColorTextureFromFramebuffer(this.gl,this.framebuffer);this.outputTexture=null}callAndCheck(this.gl,function(){return _this.gl.deleteTexture(texture)})};GPGPUContext.prototype.downloadByteEncodedFloatMatrixFromOutputTexture=function(texture,rows,columns){var _this=this;return this.downloadMatrixDriver(texture,function(){return downloadByteEncodedFloatMatrixFromOutputTexture(_this.gl,rows,columns,_this.textureConfig)})};GPGPUContext.prototype.downloadPackedMatrixFromBuffer=function(buffer,batch,rows,columns,physicalRows,physicalCols){return downloadPackedMatrixFromBuffer(this.gl,buffer,batch,rows,columns,physicalRows,physicalCols,this.textureConfig)};GPGPUContext.prototype.downloadFloat32MatrixFromBuffer=function(buffer,size){return downloadFloat32MatrixFromBuffer(this.gl,buffer,size)};GPGPUContext.prototype.createBufferFromTexture=function(texture,rows,columns){this.bindTextureToFrameBuffer(texture);var result=createBufferFromOutputTexture(this.gl,rows,columns,this.textureConfig);this.unbindTextureToFrameBuffer();return result};GPGPUContext.prototype.createAndWaitForFence=function(){var fenceContext=this.createFence(this.gl);return this.pollFence(fenceContext)};GPGPUContext.prototype.createFence=function(gl){var _this=this;var query;var isFencePassed;if(tf.env().getBool("WEBGL_FENCE_API_ENABLED")){var gl2_1=gl;var sync_1=gl2_1.fenceSync(gl2_1.SYNC_GPU_COMMANDS_COMPLETE,0);gl.flush();isFencePassed=function(){var status=gl2_1.clientWaitSync(sync_1,0,0);return status===gl2_1.ALREADY_SIGNALED||status===gl2_1.CONDITION_SATISFIED};query=sync_1}else if(tf.env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0){query=this.beginQuery();this.endQuery();isFencePassed=function(){return _this.isQueryAvailable(query,tf.env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}}else{isFencePassed=function(){return true}}return{query:query,isFencePassed:isFencePassed}};GPGPUContext.prototype.downloadMatrixFromPackedTexture=function(texture,physicalRows,physicalCols){var _this=this;return this.downloadMatrixDriver(texture,function(){return downloadMatrixFromPackedOutputTexture(_this.gl,physicalRows,physicalCols)})};GPGPUContext.prototype.createProgram=function(fragmentShaderSource){var _this=this;this.throwIfDisposed();var gl=this.gl;var fragmentShader=createFragmentShader(gl,fragmentShaderSource);if(this.vertexShader==null){this.vertexShader=createVertexShader(gl)}var program=createProgram(gl);callAndCheck(gl,function(){return gl.attachShader(program,_this.vertexShader)});callAndCheck(gl,function(){return gl.attachShader(program,fragmentShader)});linkProgram(gl,program);if(this.debug){validateProgram(gl,program)}if(!this.vertexAttrsAreBound){this.setProgram(program);this.vertexAttrsAreBound=bindVertexProgramAttributeStreams(gl,this.program,this.vertexBuffer)}return program};GPGPUContext.prototype.deleteProgram=function(program){var _this=this;this.throwIfDisposed();if(program===this.program){this.program=null}if(program!=null){callAndCheck(this.gl,function(){return _this.gl.deleteProgram(program)})}};GPGPUContext.prototype.setProgram=function(program){var _this=this;this.throwIfDisposed();this.program=program;if(this.program!=null&&this.debug){validateProgram(this.gl,this.program)}callAndCheck(this.gl,function(){return _this.gl.useProgram(program)})};GPGPUContext.prototype.getUniformLocation=function(program,uniformName,shouldThrow){if(shouldThrow===void 0){shouldThrow=true}this.throwIfDisposed();if(shouldThrow){return getProgramUniformLocationOrThrow(this.gl,program,uniformName)}else{return getProgramUniformLocation(this.gl,program,uniformName)}};GPGPUContext.prototype.getAttributeLocation=function(program,attribute){var _this=this;this.throwIfDisposed();return callAndCheck(this.gl,function(){return _this.gl.getAttribLocation(program,attribute)})};GPGPUContext.prototype.getUniformLocationNoThrow=function(program,uniformName){this.throwIfDisposed();return this.gl.getUniformLocation(program,uniformName)};GPGPUContext.prototype.setInputMatrixTexture=function(inputMatrixTexture,uniformLocation,textureUnit){this.throwIfDisposed();this.throwIfNoProgram();bindTextureToProgramUniformSampler(this.gl,inputMatrixTexture,uniformLocation,textureUnit)};GPGPUContext.prototype.setOutputMatrixTexture=function(outputMatrixTexture,rows,columns){this.setOutputMatrixTextureDriver(outputMatrixTexture,columns,rows)};GPGPUContext.prototype.setOutputPackedMatrixTexture=function(outputPackedMatrixTexture,rows,columns){this.throwIfDisposed();var _a=__read(getPackedMatrixTextureShapeWidthHeight(rows,columns),2),width=_a[0],height=_a[1];this.setOutputMatrixTextureDriver(outputPackedMatrixTexture,width,height)};GPGPUContext.prototype.setOutputMatrixWriteRegion=function(startRow,numRows,startColumn,numColumns){this.setOutputMatrixWriteRegionDriver(startColumn,startRow,numColumns,numRows)};GPGPUContext.prototype.setOutputPackedMatrixWriteRegion=function(startRow,numRows,startColumn,numColumns){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")};GPGPUContext.prototype.debugValidate=function(){if(this.program!=null){validateProgram(this.gl,this.program)}validateFramebuffer(this.gl)};GPGPUContext.prototype.executeProgram=function(){this.throwIfDisposed();this.throwIfNoProgram();var gl=this.gl;if(this.debug){this.debugValidate()}callAndCheck(gl,function(){return gl.drawElements(gl.TRIANGLES,6,gl.UNSIGNED_SHORT,0)})};GPGPUContext.prototype.blockUntilAllProgramsCompleted=function(){var _this=this;this.throwIfDisposed();callAndCheck(this.gl,function(){return _this.gl.finish()})};GPGPUContext.prototype.getQueryTimerExtension=function(){if(this.disjointQueryTimerExtension==null){this.disjointQueryTimerExtension=getExtensionOrThrow(this.gl,tf.env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")}return this.disjointQueryTimerExtension};GPGPUContext.prototype.getQueryTimerExtensionWebGL2=function(){return this.getQueryTimerExtension()};GPGPUContext.prototype.getQueryTimerExtensionWebGL1=function(){return this.getQueryTimerExtension()};GPGPUContext.prototype.beginQuery=function(){if(tf.env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){var gl2=this.gl;var ext_1=this.getQueryTimerExtensionWebGL2();var query_1=gl2.createQuery();gl2.beginQuery(ext_1.TIME_ELAPSED_EXT,query_1);return query_1}var ext=this.getQueryTimerExtensionWebGL1();var query=ext.createQueryEXT();ext.beginQueryEXT(ext.TIME_ELAPSED_EXT,query);return query};GPGPUContext.prototype.endQuery=function(){if(tf.env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){var gl2=this.gl;var ext_2=this.getQueryTimerExtensionWebGL2();gl2.endQuery(ext_2.TIME_ELAPSED_EXT);return}var ext=this.getQueryTimerExtensionWebGL1();ext.endQueryEXT(ext.TIME_ELAPSED_EXT)};GPGPUContext.prototype.waitForQueryAndGetTime=function(query){return __awaiter(this,void 0,void 0,function(){var _this=this;return __generator(this,function(_a){switch(_a.label){case 0:return[4,tf.util.repeatedTry(function(){return _this.disposed||_this.isQueryAvailable(query,tf.env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))})];case 1:_a.sent();return[2,this.getQueryTime(query,tf.env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))]}})})};GPGPUContext.prototype.getQueryTime=function(query,queryTimerVersion){if(queryTimerVersion===0){return null}if(queryTimerVersion===2){var gl2=this.gl;var timeElapsedNanos=gl2.getQueryParameter(query,gl2.QUERY_RESULT);return timeElapsedNanos/1e6}else{var ext=this.getQueryTimerExtensionWebGL1();var timeElapsedNanos=ext.getQueryObjectEXT(query,ext.QUERY_RESULT_EXT);return timeElapsedNanos/1e6}};GPGPUContext.prototype.isQueryAvailable=function(query,queryTimerVersion){if(queryTimerVersion===0){return true}if(queryTimerVersion===2){var gl2=this.gl;var ext=this.getQueryTimerExtensionWebGL2();var available=gl2.getQueryParameter(query,gl2.QUERY_RESULT_AVAILABLE);if(this.disjoint==null){this.disjoint=this.gl.getParameter(ext.GPU_DISJOINT_EXT)}return available&&!this.disjoint}else{var ext=this.getQueryTimerExtensionWebGL1();var available=ext.getQueryObjectEXT(query,ext.QUERY_RESULT_AVAILABLE_EXT);if(this.disjoint==null){this.disjoint=this.gl.getParameter(ext.GPU_DISJOINT_EXT)}return available&&!this.disjoint}};GPGPUContext.prototype.pollFence=function(fenceContext){var _this=this;return new Promise(function(resolve){_this.addItemToPoll(function(){return fenceContext.isFencePassed()},function(){return resolve()})})};GPGPUContext.prototype.pollItems=function(){var index=linearSearchLastTrue(this.itemsToPoll.map(function(x){return x.isDoneFn}));for(var i=0;i<=index;++i){var resolveFn=this.itemsToPoll[i].resolveFn;resolveFn()}this.itemsToPoll=this.itemsToPoll.slice(index+1)};GPGPUContext.prototype.addItemToPoll=function(isDoneFn,resolveFn){var _this=this;this.itemsToPoll.push({isDoneFn:isDoneFn,resolveFn:resolveFn});if(this.itemsToPoll.length>1){return}tf.util.repeatedTry(function(){_this.pollItems();return _this.itemsToPoll.length===0})};GPGPUContext.prototype.bindTextureToFrameBuffer=function(texture){this.throwIfDisposed();bindColorTextureToFramebuffer(this.gl,texture,this.framebuffer);if(this.debug){validateFramebuffer(this.gl)}};GPGPUContext.prototype.unbindTextureToFrameBuffer=function(){if(this.outputTexture!=null){bindColorTextureToFramebuffer(this.gl,this.outputTexture,this.framebuffer);if(this.debug){validateFramebuffer(this.gl)}}else{unbindColorTextureFromFramebuffer(this.gl,this.framebuffer)}};GPGPUContext.prototype.downloadMatrixDriver=function(texture,downloadAndDecode){this.bindTextureToFrameBuffer(texture);var result=downloadAndDecode();this.unbindTextureToFrameBuffer();return result};GPGPUContext.prototype.setOutputMatrixTextureDriver=function(outputMatrixTextureMaybePacked,width,height){this.throwIfDisposed();var gl=this.gl;bindColorTextureToFramebuffer(gl,outputMatrixTextureMaybePacked,this.framebuffer);if(this.debug){validateFramebuffer(gl)}this.outputTexture=outputMatrixTextureMaybePacked;callAndCheck(gl,function(){return gl.viewport(0,0,width,height)});callAndCheck(gl,function(){return gl.scissor(0,0,width,height)})};GPGPUContext.prototype.setOutputMatrixWriteRegionDriver=function(x,y,width,height){var _this=this;this.throwIfDisposed();callAndCheck(this.gl,function(){return _this.gl.scissor(x,y,width,height)})};GPGPUContext.prototype.throwIfDisposed=function(){if(this.disposed){throw new Error("Attempted to use disposed GPGPUContext.")}};GPGPUContext.prototype.throwIfNoProgram=function(){if(this.program==null){throw new Error("No GPU program is currently set.")}};return GPGPUContext}();function linearSearchLastTrue(arr){var i=0;for(;i<arr.length;++i){var isDone=arr[i]();if(!isDone){break}}return i-1}function simpleAbsImpl(vals){var resultValues=new Float32Array(vals.length);for(var i=0;i<vals.length;++i){resultValues[i]=Math.abs(vals[i])}return resultValues}function createSimpleBinaryKernelImpl(op){return function(aShape,bShape,aVals,bVals,dtype){var newShape=tf.backend_util.assertAndGetBroadcastShape(aShape,bShape);var resultRank=newShape.length;var resultStrides=tf.util.computeStrides(newShape);var resultSize=tf.util.sizeFromShape(newShape);var result=tf.util.getTypedArrayFromDType(dtype,resultSize);var aRank=aShape.length;var bRank=bShape.length;var aStrides=tf.util.computeStrides(aShape);var bStrides=tf.util.computeStrides(bShape);var aBroadcastDims=tf.backend_util.getBroadcastDims(aShape,newShape);var bBroadcastDims=tf.backend_util.getBroadcastDims(bShape,newShape);if(aBroadcastDims.length+bBroadcastDims.length===0){for(var i=0;i<result.length;++i){result[i]=op(aVals[i%aVals.length],bVals[i%bVals.length])}}else{var _loop_1=function(i){var loc=tf.util.indexToLoc(i,resultRank,resultStrides);var aLoc=loc.slice(-aRank);aBroadcastDims.forEach(function(d){return aLoc[d]=0});var aIndex=tf.util.locToIndex(aLoc,aRank,aStrides);var bLoc=loc.slice(-bRank);bBroadcastDims.forEach(function(d){return bLoc[d]=0});var bIndex=tf.util.locToIndex(bLoc,bRank,bStrides);result[i]=op(aVals[aIndex],bVals[bIndex])};for(var i=0;i<result.length;++i){_loop_1(i)}}return[result,newShape]}}var addImpl=createSimpleBinaryKernelImpl(function(a,b){return a+b});function bincountImpl(xVals,weightsVals,weightsDtype,weightsShape,size){var weightsSize=tf.util.sizeFromShape(weightsShape);var outVals=tf.util.makeZerosTypedArray(size,weightsDtype);for(var i=0;i<xVals.length;i++){var value=xVals[i];if(value<0){throw new Error("Input x must be non-negative!")}if(value>=size){continue}if(weightsSize>0){outVals[value]+=weightsVals[i]}else{outVals[value]+=1}}return outVals}function bincountReduceImpl(xBuf,weightsBuf,size,binaryOutput){if(binaryOutput===void 0){binaryOutput=false}var numRows=xBuf.shape[0];var numCols=xBuf.shape[1];var outBuf=tf.buffer([numRows,size],weightsBuf.dtype);for(var i=0;i<numRows;i++){for(var j=0;j<numCols;j++){var value=xBuf.get(i,j);if(value<0){throw new Error("Input x must be non-negative!")}if(value>=size){continue}if(binaryOutput){outBuf.set(1,i,value)}else{if(weightsBuf.size>0){outBuf.set(outBuf.get(i,value)+weightsBuf.get(i,j),i,value)}else{outBuf.set(outBuf.get(i,value)+1,i,value)}}}}return outBuf}function createSimpleUnaryImpl(op){return function(values,dtype,attrs){var newValues=tf.util.getTypedArrayFromDType(dtype,values.length);for(var i=0;i<values.length;++i){newValues[i]=op(values[i],attrs)}return newValues}}var ceilImpl=createSimpleUnaryImpl(function(xi){return Math.ceil(xi)});function concatImpl$1(inputs,outShape,dtype,simplyConcat){var outVals=tf.util.getArrayFromDType(dtype,tf.util.sizeFromShape(outShape));if(simplyConcat&&dtype!=="string"){var offset_1=0;inputs.forEach(function(input){var size=tf.util.sizeFromShape(input.shape);outVals.set(input.vals,offset_1);offset_1+=size})}else{var colOffset_1=0;inputs.forEach(function(input){var decodedData=dtype==="string"?tf.backend_util.fromUint8ToStringArray(input.vals):input.vals;var tIdx=0;for(var row=0;row<input.shape[0];++row){var resIdx=row*outShape[1]+colOffset_1;for(var col=0;col<input.shape[1];++col){outVals[resIdx+col]=decodedData[tIdx++]}}colOffset_1+=input.shape[1]})}return outVals}var equalImpl=createSimpleBinaryKernelImpl(function(a,b){return a===b?1:0});var expImpl=createSimpleUnaryImpl(function(xi){return Math.exp(xi)});var expm1Impl=createSimpleUnaryImpl(function(xi){return Math.expm1(xi)});var floorImpl=createSimpleUnaryImpl(function(xi){return Math.floor(xi)});function gatherNdImpl(indicesData,paramsBuf,dtype,numSlices,sliceRank,sliceSize,strides,paramsShape,paramsSize){var outBuf=tf.buffer([numSlices,sliceSize],dtype);for(var i=0;i<numSlices;i++){var index=[];var flattenIndex=0;for(var j=0;j<sliceRank;j++){var dim=indicesData[i*sliceRank+j];flattenIndex+=dim*strides[j];index.push(dim)}if(flattenIndex<0||flattenIndex>=paramsSize/sliceSize){throw new Error("Invalid indices: "+index+" does not index into "+paramsShape)}for(var k=0;k<sliceSize;k++){outBuf.values[i*sliceSize+k]=paramsBuf.get.apply(paramsBuf,__spread(paramsBuf.indexToLoc(flattenIndex*sliceSize+k)))}}return outBuf}function gatherV2Impl(xBuf,indicesBuf,flattenOutputShape){var outBuf=tf.buffer(flattenOutputShape,xBuf.dtype);for(var i=0;i<outBuf.size;++i){var newLoc=outBuf.indexToLoc(i);var originalLoc=newLoc.slice();var batchIdx=originalLoc[0];var indicesIdx=originalLoc[2];var indicesIndex=indicesBuf.locToIndex([batchIdx,indicesIdx]);originalLoc[2]=indicesBuf.values[indicesIndex];var originalIndex=xBuf.locToIndex(originalLoc);outBuf.values[i]=xBuf.values[originalIndex]}return outBuf}var greaterImpl=createSimpleBinaryKernelImpl(function(a,b){return a>b?1:0});var greaterEqualImpl=createSimpleBinaryKernelImpl(function(a,b){return a>=b?1:0});var lessImpl=createSimpleBinaryKernelImpl(function(a,b){return a<b?1:0});var lessEqualImpl=createSimpleBinaryKernelImpl(function(a,b){return a<=b?1:0});function linSpaceImpl(start,stop,num){var step=(stop-start)/(num-1);var values=tf.util.makeZerosTypedArray(num,"float32");values[0]=start;for(var i=1;i<values.length;i++){values[i]=values[i-1]+step}return values}var logImpl=createSimpleUnaryImpl(function(xi){return Math.log(xi)});function maxImpl$1(aVals,reduceSize,outShape,dtype){var vals=tf.util.getTypedArrayFromDType(dtype,tf.util.sizeFromShape(outShape));for(var i=0;i<vals.length;++i){var offset=i*reduceSize;var max=aVals[offset];for(var j=0;j<reduceSize;++j){var value=aVals[offset+j];if(Number.isNaN(value)||value>max){max=value}}vals[i]=max}return vals}var maximumImpl=createSimpleBinaryKernelImpl(function(aValue,bValue){return Math.max(aValue,bValue)});var minimumImpl=createSimpleBinaryKernelImpl(function(aValue,bValue){return Math.min(aValue,bValue)});var multiplyImpl=createSimpleBinaryKernelImpl(function(aValue,bValue){return aValue*bValue});function negImpl(xVals,xShape,xDtype){var minusOne=tf.util.createScalarValue(-1,xDtype);return multiplyImpl([],xShape,minusOne,xVals,xDtype)}var notEqualImpl=createSimpleBinaryKernelImpl(function(a,b){return a!==b?1:0});function transposeImpl$1(xVals,xShape,dtype,perm,newShape){var xRank=xShape.length;var xSize=tf.util.sizeFromShape(xShape);var xStrides=tf.util.computeStrides(xShape);var newStrides=tf.util.computeStrides(newShape);var result=tf.util.getTypedArrayFromDType(dtype,tf.util.sizeFromShape(newShape));for(var i=0;i<xSize;++i){var loc=tf.util.indexToLoc(i,xRank,xStrides);var newLoc=new Array(loc.length);for(var i_1=0;i_1<newLoc.length;i_1++){newLoc[i_1]=loc[perm[i_1]]}var newIndex=tf.util.locToIndex(newLoc,xRank,newStrides);result[newIndex]=xVals[i]}return result}function prodImpl(xShape,xDtype,xVals,reductionAxes){var _a=__read(tf.backend_util.computeOutAndReduceShapes(xShape,reductionAxes),2),outShape=_a[0],reduceShape=_a[1];var outDtype=tf.upcastType(xDtype,"int32");var outVals=tf.util.makeZerosTypedArray(tf.util.sizeFromShape(outShape),outDtype);var reduceSize=tf.util.sizeFromShape(reduceShape);for(var i=0;i<outVals.length;++i){var offset=i*reduceSize;var prod_1=1;for(var j=0;j<reduceSize;++j){prod_1*=xVals[offset+j]}outVals[i]=prod_1}return{outVals:outVals,outShape:outShape,outDtype:outDtype}}function rangeImpl(start,stop,step,dtype){var sameStartStop=start===stop;var increasingRangeNegativeStep=start<stop&&step<0;var decreasingRangePositiveStep=stop<start&&step>1;if(sameStartStop||increasingRangeNegativeStep||decreasingRangePositiveStep){return tf.util.makeZerosTypedArray(0,dtype)}var numElements=Math.abs(Math.ceil((stop-start)/step));var values=tf.util.makeZerosTypedArray(numElements,dtype);if(stop<start&&step===1){step=-1}values[0]=start;for(var i=1;i<values.length;i++){values[i]=values[i-1]+step}return values}var rsqrtImpl=createSimpleUnaryImpl(function(xi){return 1/Math.sqrt(xi)});var sigmoidImpl=createSimpleUnaryImpl(function(xi){return 1/(1+Math.exp(-xi))});function sliceImpl(vals,begin,size,shape,dtype){var isContinous=tf.slice_util.isSliceContinous(shape,begin,size);var length=tf.util.sizeFromShape(size);var xStrides=tf.util.computeStrides(shape);if(isContinous){var flatOffset=tf.slice_util.computeFlatOffset(begin,xStrides);if(dtype==="string"){return vals.slice(flatOffset,flatOffset+length)}return vals.subarray(flatOffset,flatOffset+length)}var decodedData=dtype==="string"?tf.backend_util.fromUint8ToStringArray(vals):vals;var inBuf=tf.buffer(shape,dtype,decodedData);var outBuf=tf.buffer(size,dtype);for(var i=0;i<outBuf.size;++i){var outLoc=outBuf.indexToLoc(i);var inLoc=outLoc.map(function(idx,j){return idx+begin[j]});outBuf.set.apply(outBuf,__spread([inBuf.get.apply(inBuf,__spread(inLoc))],outLoc))}if(dtype==="string"){return tf.backend_util.fromStringArrayToUint8(outBuf.values)}return outBuf.values}function sparseFillEmptyRowsImpl(indices,indicesShape,indicesDType,values,valuesDType,denseShape,defaultValue){var indicesCount=indicesShape[0];var denseRows=denseShape[0];var emptyRowIndicator=new Array(denseRows);var reverseIndexMap=new Array(indicesCount);var rank=indicesShape[1];if(denseRows===0){if(indicesCount!==0){throw new Error("Received SparseTensor with denseShape[0] = 0 but\n         indices.shape[0] = "+indicesCount)}var outputIndices=tf.util.getArrayFromDType(indicesDType,0);var outputValues=tf.util.getArrayFromDType(valuesDType,0);return[outputIndices,[0,rank],outputValues,emptyRowIndicator,reverseIndexMap]}var rowsAreOrdered=true;var lastIndicesRow=0;var csrOffset=new Array(denseRows).fill(0);for(var i=0;i<indicesCount;++i){var row=indices[i*rank];if(row<0){throw new Error("indices("+i+", 0) is invalid: "+row+" < 0")}if(row>=denseRows){throw new Error("indices("+i+", 0) is invalid: "+row+" >= "+denseRows)}++csrOffset[row];rowsAreOrdered=rowsAreOrdered&&row>=lastIndicesRow;lastIndicesRow=row}var allRowsFull=true;for(var row=0;row<denseRows;++row){var rowEmpty=csrOffset[row]===0;emptyRowIndicator[row]=rowEmpty;allRowsFull=allRowsFull&&!rowEmpty;csrOffset[row]=Math.max(csrOffset[row],1);if(row>0){csrOffset[row]+=csrOffset[row-1]}}if(allRowsFull&&rowsAreOrdered){var outputIndices=indices;var outputValues=values;for(var i=0;i<indicesCount;++i){reverseIndexMap[i]=i}return[outputIndices,[indicesCount,rank],outputValues,emptyRowIndicator,reverseIndexMap]}else{var fullIndicesCount=csrOffset[denseRows-1];var outputIndices=tf.util.getArrayFromDType(indicesDType,fullIndicesCount*rank);var outputValues=tf.util.getArrayFromDType(valuesDType,fullIndicesCount);var filledCount=new Array(denseRows).fill(0);for(var i=0;i<indicesCount;++i){var row=indices[i*rank];var offset=filledCount[row];var outputI=(row===0?0:csrOffset[row-1])+offset;filledCount[row]++;for(var j=0;j<rank;++j){outputIndices[outputI*rank+j]=indices[i*rank+j]}outputValues[outputI]=values[i];reverseIndexMap[i]=outputI}for(var row=0;row<denseRows;++row){var rowCount=filledCount[row];if(rowCount===0){var startingIndex=row===0?0:csrOffset[row-1];outputIndices[startingIndex*rank+0]=row;for(var col=1;col<rank;++col){outputIndices[startingIndex*rank+col]=0}outputValues[startingIndex]=defaultValue}}return[outputIndices,[fullIndicesCount,rank],outputValues,emptyRowIndicator,reverseIndexMap]}}function sparseReshapeImpl(inputIndices,inputIndicesShape,inputDType,inputShape,targetShape){var denseSize=tf.util.sizeFromShape(inputShape);var nnz=inputIndicesShape[0];var outputRank=targetShape.length;var outputShape=[];var product=1;var unknownIndex=-1;for(var d=0;d<outputRank;++d){var size=targetShape[d];if(size===-1){if(unknownIndex!==-1){throw new Error("only one output dimension may be -1, not both "+unknownIndex+" and "+d)}unknownIndex=d;outputShape.push(1)}else{if(size<0){throw new Error("size "+d+" must be non-negative, not "+size)}product*=size;outputShape.push(size)}}if(unknownIndex!==-1){if(product<=0){throw new Error("reshape cannot infer the missing "+"input size for an empty tensor unless all "+"specified input sizes are non-zero")}var missing=Math.trunc(denseSize/product);if(product*missing!==denseSize){throw new Error("Input to reshape is a SparseTensor with "+denseSize+"\n          dense values, but the requested shape requires a multiple of "+product+". inputShape="+inputShape+" outputShape= "+outputShape)}outputShape[unknownIndex]=missing}var outputSize=tf.util.sizeFromShape(outputShape);if(outputSize!==denseSize){throw new Error("Input to reshape is a tensor with "+denseSize+" dense values, but the requested shape has "+outputSize+". inputShape="+inputShape+" outputShape="+outputShape)}var inputRank=inputShape.length;var inputStrides=[];if(inputRank>0){inputStrides[inputRank-1]=1;for(var d=inputRank-2;d>=0;--d){inputStrides[d]=inputStrides[d+1]*inputShape[d+1]}}var outputStrides=[];if(outputRank>0){outputStrides[outputRank-1]=1;for(var d=outputRank-2;d>=0;--d){outputStrides[d]=outputStrides[d+1]*outputShape[d+1]}}var newIndices=tf.util.getArrayFromDType(inputDType,nnz*outputRank);for(var i=0;i<nnz;++i){var id=0;for(var j=0;j<inputRank;++j){id+=inputIndices[i*inputRank+j]*inputStrides[j]}for(var j=0;j<outputRank;++j){newIndices[i*outputRank+j]=Math.trunc(id/outputStrides[j]);id%=outputStrides[j]}}return[newIndices,[nnz,outputRank],outputShape]}function sparseSegmentReductionImpl(input,inputShape,inputDType,indices,segmentIds,isMean,defaultValue){if(isMean===void 0){isMean=false}if(defaultValue===void 0){defaultValue=0}var numIndices=indices.length;if(numIndices!==segmentIds.length){throw new Error("segmentIds and indices should have same size.")}var inputFlat=[inputShape[0],input.length/inputShape[0]];var numCol=inputFlat[1];var lastSegmentIdPlusOne=numIndices>0?segmentIds[numIndices-1]+1:0;var outputRows=lastSegmentIdPlusOne;if(outputRows<0){throw new Error("segment ids must be >= 0")}var outputShape=inputShape.slice();outputShape[0]=outputRows;var outputLength=outputShape.reduce(function(product,value){return product*value},1);var output=tf.util.getArrayFromDType(inputDType,outputLength);if(numIndices===0){if(outputRows>0){output.fill(defaultValue)}return[output,outputShape]}if(outputRows<=0){throw new Error("segment ids must be >= 0")}var start=0,end=1;var uninitializedIndex=0;var outIndex=segmentIds[start];while(true){var nextIndex=0;if(end<numIndices){nextIndex=segmentIds[end];if(outIndex===nextIndex){++end;continue}if(outIndex>=nextIndex){throw new Error("segment ids are not increasing")}}if(outIndex<0||outIndex>=outputRows){throw new Error("Segment id "+outIndex+" out of range [0, "+outputRows+"), possibly because segmentIds input is not sorted.")}if(outIndex>uninitializedIndex){output.fill(defaultValue,uninitializedIndex*numCol,outIndex*numCol)}for(var i=start;i<end;++i){var index=indices[i];if(index<0||index>=inputFlat[0]){throw new Error("Bad: indices["+i+"] == "+indices[i]+" out of range [0, "+inputFlat[0]+")")}for(var j=0;j<numCol;j++){output[outIndex*numCol+j]+=input[index*numCol+j]}}if(isMean){for(var j=0;j<numCol;j++){output[outIndex*numCol+j]/=end-start}}start=end;++end;uninitializedIndex=outIndex+1;outIndex=nextIndex;if(end>numIndices){break}}if(uninitializedIndex<outputRows){output.fill(defaultValue,uninitializedIndex*numCol,outputRows*numCol)}return[output,outputShape]}var sqrtImpl=createSimpleUnaryImpl(function(xi){return Math.sqrt(xi)});function stridedSliceImpl(outShape,xBuf,strides,begin){var outBuf=tf.buffer(outShape,xBuf.dtype);for(var i=0;i<outBuf.size;i++){var loc=outBuf.indexToLoc(i);var newLoc=new Array(loc.length);for(var j=0;j<newLoc.length;j++){newLoc[j]=loc[j]*strides[j]+begin[j]}outBuf.set.apply(outBuf,__spread([xBuf.get.apply(xBuf,__spread(newLoc))],loc))}return outBuf}var StringNGramsOp=function(){function StringNGramsOp(separator,nGramWidths,leftPad,rightPad,padWidth,preserveShortSequences){this.separator=tf.util.encodeString(separator);this.nGramWidths=nGramWidths;this.leftPad=tf.util.encodeString(leftPad);this.rightPad=tf.util.encodeString(rightPad);this.padWidth=padWidth;this.preserveShort=preserveShortSequences}StringNGramsOp.prototype.getPadWidth=function(nGramWidth){return Math.min(this.padWidth<0?nGramWidth-1:this.padWidth,nGramWidth-1)};StringNGramsOp.prototype.getNumNGrams=function(length,nGramWidth){var padWidth=this.getPadWidth(nGramWidth);return Math.max(0,length+2*padWidth-nGramWidth+1)};StringNGramsOp.prototype.createNGrams=function(data,splitIndex,output,outputStartIndex,numNGrams,nGramWidth){var _loop_1=function(nGramIndex){var padWidth=this_1.getPadWidth(nGramWidth);var leftPadding=Math.max(0,padWidth-nGramIndex);var rightPadding=Math.max(0,padWidth-(numNGrams-(nGramIndex+1)));var numTokens=nGramWidth-(leftPadding+rightPadding);var dataStartIndex=splitIndex+(leftPadding>0?0:nGramIndex-padWidth);var nGramSize=0;nGramSize+=leftPadding*this_1.leftPad.length;for(var n=0;n<numTokens;++n){nGramSize+=data[dataStartIndex+n].length}nGramSize+=rightPadding*this_1.rightPad.length;var numSeparators=leftPadding+rightPadding+numTokens-1;nGramSize+=numSeparators*this_1.separator.length;output[outputStartIndex+nGramIndex]=new Uint8Array(nGramSize);var nGram=output[outputStartIndex+nGramIndex];var nextNGramIndex=0;var appendToNGram=function(str){return str.forEach(function(value){return nGram[nextNGramIndex++]=value})};for(var n=0;n<leftPadding;++n){appendToNGram(this_1.leftPad);appendToNGram(this_1.separator)}for(var n=0;n<numTokens-1;++n){appendToNGram(data[dataStartIndex+n]);appendToNGram(this_1.separator)}if(numTokens>0){appendToNGram(data[dataStartIndex+numTokens-1]);for(var n=0;n<rightPadding;++n){appendToNGram(this_1.separator);appendToNGram(this_1.rightPad)}}else{for(var n=0;n<rightPadding-1;++n){appendToNGram(this_1.rightPad);appendToNGram(this_1.separator)}appendToNGram(this_1.rightPad)}};var this_1=this;for(var nGramIndex=0;nGramIndex<numNGrams;++nGramIndex){_loop_1(nGramIndex)}};StringNGramsOp.prototype.compute=function(data,splits){var _this=this;var inputDataSize=data.length;var splitsSize=splits.length;if(splitsSize>0){var prevSplit=splits[0];if(prevSplit!==0){throw new Error("First split value must be 0, got "+prevSplit)}for(var i=1;i<splitsSize;++i){var validSplits=splits[i]>=prevSplit;validSplits=validSplits&&splits[i]<=inputDataSize;if(!validSplits){throw new Error("Invalid split value "+splits[i]+", must be in ["+prevSplit+", "+inputDataSize+"]")}prevSplit=splits[i]}if(prevSplit!==inputDataSize){throw new Error("Last split value must be data size. Expected "+inputDataSize+", got "+prevSplit)}}var numBatchItems=splitsSize-1;var nGramsSplits=tf.util.getArrayFromDType("int32",splitsSize);if(inputDataSize===0||splitsSize===0){var empty=new Array(inputDataSize);for(var i=0;i<=numBatchItems;++i){nGramsSplits[i]=0}return[empty,nGramsSplits]}nGramsSplits[0]=0;var _loop_2=function(i){var length=splits[i]-splits[i-1];var numNGrams=0;this_2.nGramWidths.forEach(function(nGramWidth){numNGrams+=_this.getNumNGrams(length,nGramWidth)});if(this_2.preserveShort&&length>0&&numNGrams===0){numNGrams=1}nGramsSplits[i]=nGramsSplits[i-1]+numNGrams};var this_2=this;for(var i=1;i<=numBatchItems;++i){_loop_2(i)}var nGrams=new Array(nGramsSplits[numBatchItems]);var _loop_3=function(i){var splitIndex=splits[i];var outputStartIdx=nGramsSplits[i];this_3.nGramWidths.forEach(function(nGramWidth){var length=splits[i+1]-splits[i];var numNGrams=_this.getNumNGrams(length,nGramWidth);_this.createNGrams(data,splitIndex,nGrams,outputStartIdx,numNGrams,nGramWidth);outputStartIdx+=numNGrams});if(this_3.preserveShort&&outputStartIdx===nGramsSplits[i]){var dataLength=splits[i+1]-splits[i];if(dataLength===0){return"continue"}var nGramWidth=dataLength+2*this_3.padWidth;var numNGrams=1;this_3.createNGrams(data,splitIndex,nGrams,outputStartIdx,numNGrams,nGramWidth)}};var this_3=this;for(var i=0;i<numBatchItems;++i){_loop_3(i)}return[nGrams,nGramsSplits]};return StringNGramsOp}();function stringNGramsImpl(data,dataSplits,separator,nGramWidths,leftPad,rightPad,padWidth,preserveShortSequences){return new StringNGramsOp(separator,nGramWidths,leftPad,rightPad,padWidth,preserveShortSequences).compute(data,dataSplits)}function split(str,delimiters,skipEmpty,result){if(!str.length){return}if(delimiters.length===0){for(var i=0;i<str.length;++i){result.push(str.subarray(i,i+1))}return}if(delimiters.length===1){var delimiter=delimiters[0];var f=str.indexOf(delimiter);while(f!==-1){var token=str.subarray(0,f);if(!skipEmpty||token.length!==0){result.push(token)}str=str.subarray(f+1);f=str.indexOf(delimiter)}if(!skipEmpty||str.length!==0){result.push(str)}return}var tokenStart=0;for(var i=0;i<str.length+1;i++){if(i===str.length||delimiters.indexOf(str[i])!==-1){var token=str.subarray(tokenStart,i);if(!skipEmpty||token.length!==0){result.push(token)}tokenStart=i+1}}}function stringSplitImpl(input,delimiter,skipEmpty){var batchSize=input.length;var tokens=[];var outputSize=0;var maxNumEntries=0;var numIndices=new Array(batchSize);for(var i=0;i<batchSize;++i){var prevTokensLength=tokens.length;split(input[i],delimiter,skipEmpty,tokens);var nEntries=tokens.length-prevTokensLength;numIndices[i]=nEntries;outputSize+=nEntries;maxNumEntries=Math.max(maxNumEntries,nEntries)}var indices=tf.util.getArrayFromDType("int32",outputSize*2);var values=new Array(outputSize);var shape=[batchSize,maxNumEntries];var c=0;for(var i=0;i<batchSize;++i){for(var j=0;j<numIndices[i];++j){indices[c*2]=i;indices[c*2+1]=j;values[c]=tokens[c];++c}}return[indices,values,shape]}function stringToHashBucketFastImpl(input,numBuckets){var output=tf.util.getArrayFromDType("int32",input.length);for(var i=0;i<input.length;++i){output[i]=tf.util.fingerPrint64(input[i]).modulo(numBuckets).getLowBitsUnsigned()}return output}var subImpl=createSimpleBinaryKernelImpl(function(aValue,bValue){return aValue-bValue});function tileImpl(xBuf,reps){var newShape=new Array(xBuf.rank);for(var i=0;i<newShape.length;i++){newShape[i]=xBuf.shape[i]*reps[i]}var result=tf.buffer(newShape,xBuf.dtype);for(var i=0;i<result.values.length;++i){var newLoc=result.indexToLoc(i);var originalLoc=new Array(xBuf.rank);for(var j=0;j<originalLoc.length;j++){originalLoc[j]=newLoc[j]%xBuf.shape[j]}var originalIndex=xBuf.locToIndex(originalLoc);result.values[i]=xBuf.values[originalIndex]}return result}var comparePair=function(a,b){var valueDiff=b.value-a.value;return valueDiff===0?a.index-b.index:valueDiff};function select$1(array,k,left,right){if(left===void 0){left=0}if(right===void 0){right=array.length-1}while(right>left){if(right-left>600){var n=right-left+1;var i_1=k-left+1;var z=Math.log(n);var s=.5*Math.exp(2*z/3);var sd=.5*Math.sqrt(z*s*(n-s)/n)*Math.sign(i_1-n/2);var newLeft=Math.max(left,Math.floor(k-i_1*s/n+sd));var newRight=Math.min(right,Math.floor(k+(n-i_1)*s/n+sd));select$1(array,k,newLeft,newRight)}var t=array[k];var i=left;var j=right;tf.util.swap(array,left,k);if(comparePair(array[right],t)>0){tf.util.swap(array,left,right)}while(i<j){tf.util.swap(array,i,j);i++;j--;while(comparePair(array[i],t)<0){i=i+1}while(comparePair(array[j],t)>0){j=j-1}}if(comparePair(array[left],t)===0){tf.util.swap(array,left,j)}else{j=j+1;tf.util.swap(array,j,right)}if(j<=k){left=j+1}if(k<=j){right=j-1}}}function topKImpl(x,xShape,xDtype,k,sorted){var lastDim=xShape[xShape.length-1];var _a=__read([x.length/lastDim,lastDim],2),batch=_a[0],size=_a[1];var allTopKVals=tf.util.getTypedArrayFromDType(xDtype,batch*k);var allTopKIndices=tf.util.getTypedArrayFromDType("int32",batch*k);var _loop_1=function(b){var offset=b*size;var vals=x.subarray(offset,offset+size);var valAndInd=new Array(vals.length);vals.forEach(function(value,index){return valAndInd[index]={value:value,index:index}});if(k<valAndInd.length){select$1(valAndInd,k);valAndInd=valAndInd.slice(0,k)}if(sorted){valAndInd.sort(comparePair)}var outOffset=b*k;var topKVals=allTopKVals.subarray(outOffset,outOffset+k);var topKIndices=allTopKIndices.subarray(outOffset,outOffset+k);for(var i=0;i<k;i++){topKVals[i]=valAndInd[i].value;topKIndices[i]=valAndInd[i].index}};for(var b=0;b<batch;b++){_loop_1(b)}var outputShape=xShape.slice();outputShape[outputShape.length-1]=k;return[tf.buffer(outputShape,xDtype,allTopKVals),tf.buffer(outputShape,"int32",allTopKIndices)]}function uniqueImpl(values,axis,shape,dtype){var $axis=tf.util.parseAxisParam(axis,shape)[0];var newShape=[1,shape[0],1];for(var i=0;i<$axis;i++){newShape[0]*=shape[i]}newShape[1]=shape[$axis];for(var i=$axis+1;i<shape.length;i++){newShape[2]*=shape[i]}var uniqueElements={};var indices=new Int32Array(shape[$axis]);var inputBuffer=new tf.TensorBuffer(newShape,dtype,values);var uniqueIndices=[];var is1DTensor=newShape[0]===1&&newShape[2]===1;for(var i=0;i<shape[$axis];i++){var element=void 0;if(is1DTensor){element=values[i].toString()}else{var axisValues=[];for(var m=0;m<newShape[0];m++){for(var n=0;n<newShape[2];n++){axisValues.push(inputBuffer.get(m,i,n))}}element=axisValues.join(",")}if(uniqueElements[element]!==undefined){indices[i]=uniqueElements[element]}else{var uniqueIndex=Object.keys(uniqueElements).length;uniqueElements[element]=uniqueIndex;indices[i]=uniqueIndex;uniqueIndices.push(i)}}var outputTmpShape=newShape.slice();outputTmpShape[1]=Object.keys(uniqueElements).length;var outputBuffer=new tf.TensorBuffer(outputTmpShape,dtype);uniqueIndices.forEach(function(uniqueElementIndex,i){for(var m=0;m<newShape[0];m++){for(var n=0;n<newShape[2];n++){outputBuffer.set(inputBuffer.get(m,uniqueElementIndex,n),m,i,n)}}});var outputShape=shape.slice();outputShape[$axis]=outputTmpShape[1];return{outputValues:outputBuffer.values,outputShape:outputShape,indices:indices}}var addImplCPU=addImpl,bincountImplCPU=bincountImpl,bincountReduceImplCPU=bincountReduceImpl,ceilImplCPU=ceilImpl,concatImplCPU=concatImpl$1,equalImplCPU=equalImpl,expImplCPU=expImpl,expm1ImplCPU=expm1Impl,floorImplCPU=floorImpl,gatherNdImplCPU=gatherNdImpl,gatherV2ImplCPU=gatherV2Impl,greaterImplCPU=greaterImpl,greaterEqualImplCPU=greaterEqualImpl,lessImplCPU=lessImpl,lessEqualImplCPU=lessEqualImpl,linSpaceImplCPU=linSpaceImpl,logImplCPU=logImpl,maxImplCPU=maxImpl$1,maximumImplCPU=maximumImpl,minimumImplCPU=minimumImpl,multiplyImplCPU=multiplyImpl,negImplCPU=negImpl,notEqualImplCPU=notEqualImpl,prodImplCPU=prodImpl,rangeImplCPU=rangeImpl,rsqrtImplCPU=rsqrtImpl,sigmoidImplCPU=sigmoidImpl,simpleAbsImplCPU=simpleAbsImpl,sliceImplCPU=sliceImpl,sparseFillEmptyRowsImplCPU=sparseFillEmptyRowsImpl,sparseReshapeImplCPU=sparseReshapeImpl,sparseSegmentReductionImplCPU=sparseSegmentReductionImpl,sqrtImplCPU=sqrtImpl,stridedSliceImplCPU=stridedSliceImpl,stringNGramsImplCPU=stringNGramsImpl,stringSplitImplCPU=stringSplitImpl,stringToHashBucketFastImplCPU=stringToHashBucketFastImpl,subImplCPU=subImpl,tileImplCPU=tileImpl,topKImplCPU=topKImpl,transposeImplCPU=transposeImpl$1,uniqueImplCPU=uniqueImpl;function getVecChannels(name,rank){return["x","y","z","w","u","v"].slice(0,rank).map(function(d){return name+"."+d})}function getChannels(name,rank){if(rank===1){return[name]}return getVecChannels(name,rank)}function getSourceCoords$2(rank,dims){if(rank===1){return"rc"}var coords="";for(var i=0;i<rank;i++){coords+=dims[i];if(i<rank-1){coords+=","}}return coords}var PackProgram=function(){function PackProgram(outputShape){this.variableNames=["A"];this.packedInputs=false;this.packedOutput=true;this.outputShape=outputShape;var rank=outputShape.length;if(rank===0){this.userCode="\n        void main() {\n          setOutput(vec4(getA(), 0., 0., 0.));\n        }\n      "}else{var channels=getChannels("rc",rank);var dtype=getCoordsDataType(rank);var outOfBoundsCondition=getOutOfBoundsCondition(rank,outputShape,channels);var setup=getSetup(rank,outputShape[outputShape.length-1],outputShape[outputShape.length-2],channels);var output=getOutput(outputShape,channels);this.userCode="\n        void main() {\n          "+dtype+" rc = getOutputCoords();\n\n          if("+outOfBoundsCondition+") {\n            setOutput(vec4(0));\n          } else {\n            "+setup+"\n\n            setOutput(vec4("+output+"));\n          }\n        }\n      "}}return PackProgram}();function getSourceCoordsArr(rank,dims){var coords=[];for(var row=0;row<=1;row++){for(var col=0;col<=1;col++){var coord=(row===0?"r":"rp1")+", "+(col===0?"c":"cp1");for(var d=2;d<rank;d++){coord=dims[dims.length-1-d]+","+coord}coords.push(coord)}}return coords}function getOutOfBoundsCondition(rank,shape,dims){if(rank===1){return"rc > "+shape[0]}var cond="";for(var i=rank-2;i<rank;i++){cond+=dims[i]+" >= "+shape[i];if(i<rank-1){cond+="||"}}return cond}function getSetup(rank,cols,rows,dims){if(rank===1){return""}var innerDims=dims.slice(-2);return"\n    int r = "+innerDims[0]+";\n    int c = "+innerDims[1]+";\n    int rp1 = r + 1;\n    int cp1 = c + 1;\n\n    bool cEdge = cp1 >= "+cols+";\n    bool rEdge = rp1 >= "+rows+";\n  "}function getOutput(shape,dims){var rank=shape.length;var sourceCoords=getSourceCoordsArr(rank,dims);if(rank===1){return"getA(rc),\n            rc + 1 >= "+shape[0]+" ? 0. : getA(rc + 1),\n            0, 0"}return"getA("+sourceCoords[0]+"),\n          cEdge ? 0. : getA("+sourceCoords[1]+"),\n          rEdge ? 0. : getA("+sourceCoords[2]+"),\n          rEdge || cEdge ? 0. : getA("+sourceCoords[3]+")"}var ReshapePackedProgram=function(){function ReshapePackedProgram(outputShape,inputShape){this.variableNames=["A"];this.packedInputs=true;this.packedOutput=true;this.customUniforms=[{name:"inputShape",type:"ivec3"}];this.outputShape=outputShape;this.enableShapeUniforms=useShapeUniforms(this.outputShape.length);var mainLoop="";for(var i=0;i<4;i++){var thisRC="thisRC = rc;";if(i%2===1){thisRC+="thisRC.z += 1;"}if(i>1){thisRC+="thisRC.y += 1;"}mainLoop+="\n        "+thisRC+"\n        "+(i>0?"if(thisRC.y < rows && thisRC.z < cols){":"")+"\n          int flatIndex = getFlatIndex(thisRC);\n\n          ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex);\n          vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z));\n\n          result["+i+"] =\n            getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);\n        "+(i>0?"}":"")+"\n      "}this.userCode="\n      "+getReshapedInputCoords(inputShape,this.enableShapeUniforms)+"\n      "+(this.enableShapeUniforms?getFlatIndexFrom3DOutput():getFlatIndexFrom3D(outputShape))+"\n\n      void main() {\n        ivec3 rc = getOutputCoords();\n\n        vec4 result = vec4(0.);\n\n        ivec3 thisRC;\n        int rows = "+(this.enableShapeUniforms?"outShape[1]":outputShape[1])+";\n        int cols = "+(this.enableShapeUniforms?"outShape[2]":outputShape[2])+";\n\n        "+mainLoop+"\n\n        setOutput(result);\n      }\n    "}return ReshapePackedProgram}();function getReshapedInputCoords(shape,enableShapeUniforms){var coordsFromIndexSnippet=enableShapeUniforms?getLogicalCoordinatesFromFlatIndexByUniform(["r","c","d"],"inputShape"):getLogicalCoordinatesFromFlatIndex(["r","c","d"],shape);return"\n    ivec3 inputCoordsFromReshapedOutCoords(int index) {\n      "+coordsFromIndexSnippet+"\n      return ivec3(r, c, d);\n    }\n  "}var TextureManager=function(){function TextureManager(gpgpu){this.gpgpu=gpgpu;this.numUsedTextures=0;this.numFreeTextures=0;this._numBytesAllocated=0;this._numBytesFree=0;this.freeTextures={};this.logEnabled=false;this.usedTextures={}}TextureManager.prototype.acquireTexture=function(shapeRC,usage,isPacked){var physicalTexType=getPhysicalFromLogicalTextureType(usage,isPacked);var shapeKey=getKeyFromTextureShape(shapeRC,physicalTexType,isPacked);if(!(shapeKey in this.freeTextures)){this.freeTextures[shapeKey]=[]}if(!(shapeKey in this.usedTextures)){this.usedTextures[shapeKey]=[]}var texBytes=computeBytes(shapeRC,physicalTexType,this.gpgpu.gl,this.gpgpu.textureConfig,isPacked);if(this.freeTextures[shapeKey].length>0){this.numFreeTextures--;this.numUsedTextures++;this._numBytesFree-=texBytes;this.log();var newTexture_1=this.freeTextures[shapeKey].shift();this.usedTextures[shapeKey].push(newTexture_1);return newTexture_1}var newTexture;if(physicalTexType===PhysicalTextureType.PACKED_2X2_FLOAT32){newTexture=this.gpgpu.createPackedMatrixTexture(shapeRC[0],shapeRC[1])}else if(physicalTexType===PhysicalTextureType.PACKED_2X2_FLOAT16){newTexture=this.gpgpu.createFloat16PackedMatrixTexture(shapeRC[0],shapeRC[1])}else if(physicalTexType===PhysicalTextureType.UNPACKED_FLOAT32){newTexture=this.gpgpu.createFloat32MatrixTexture(shapeRC[0],shapeRC[1])}else if(physicalTexType===PhysicalTextureType.UNPACKED_FLOAT16){newTexture=this.gpgpu.createFloat16MatrixTexture(shapeRC[0],shapeRC[1])}else if(physicalTexType===PhysicalTextureType.PACKED_4X1_UNSIGNED_BYTE){newTexture=this.gpgpu.createUnsignedBytesMatrixTexture(shapeRC[0],shapeRC[1])}this.usedTextures[shapeKey].push(newTexture);this.numUsedTextures++;this._numBytesAllocated+=texBytes;this.log();return newTexture};TextureManager.prototype.releaseTexture=function(texture,shape,logicalTexType,isPacked){if(this.freeTextures==null){return}var physicalTexType=getPhysicalFromLogicalTextureType(logicalTexType,isPacked);var shapeKey=getKeyFromTextureShape(shape,physicalTexType,isPacked);if(!(shapeKey in this.freeTextures)){this.freeTextures[shapeKey]=[]}var texBytes=computeBytes(shape,physicalTexType,this.gpgpu.gl,this.gpgpu.textureConfig,isPacked);var deleteTexThreshold=tf.env().get("WEBGL_DELETE_TEXTURE_THRESHOLD");if(deleteTexThreshold!==-1&&this._numBytesAllocated>deleteTexThreshold){this.gpgpu.deleteMatrixTexture(texture);this._numBytesAllocated-=texBytes}else{this.freeTextures[shapeKey].push(texture);this.numFreeTextures++;this._numBytesFree+=texBytes}this.numUsedTextures--;var texList=this.usedTextures[shapeKey];var texIndex=texList.indexOf(texture);if(texIndex<0){throw new Error("Cannot release a texture that was never provided by this "+"texture manager")}texList.splice(texIndex,1);this.log()};TextureManager.prototype.log=function(){if(!this.logEnabled){return}var total=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",this.numFreeTextures+" / "+this.numUsedTextures,"("+total+")");var freeRatio=this._numBytesFree/this._numBytesAllocated;console.log("Bytes allocated: "+this._numBytesAllocated);console.log("Bytes unused: "+this._numBytesFree+" ("+Math.round(100*freeRatio)+"%)")};Object.defineProperty(TextureManager.prototype,"numBytesAllocated",{get:function(){return this._numBytesAllocated},enumerable:true,configurable:true});Object.defineProperty(TextureManager.prototype,"numBytesFree",{get:function(){return this._numBytesFree},enumerable:true,configurable:true});TextureManager.prototype.getNumUsedTextures=function(){return this.numUsedTextures};TextureManager.prototype.getNumFreeTextures=function(){return this.numFreeTextures};TextureManager.prototype.dispose=function(){var _this=this;if(this.freeTextures==null){return}for(var texShape in this.freeTextures){this.freeTextures[texShape].forEach(function(tex){_this.gpgpu.deleteMatrixTexture(tex)})}for(var texShape in this.usedTextures){this.usedTextures[texShape].forEach(function(tex){_this.gpgpu.deleteMatrixTexture(tex)})}this.freeTextures=null;this.usedTextures=null;this.numUsedTextures=0;this.numFreeTextures=0;this._numBytesAllocated=0;this._numBytesFree=0};return TextureManager}();function numBytesForInternalFormat(gl,internalFormat){var glany=gl;if(internalFormat===glany.R32F){return 4}else if(internalFormat===glany.R16F){return 2}else if(internalFormat===glany.RGBA32F){return 16}else if(internalFormat===gl.RGBA){return 16}else if(internalFormat===glany.RGBA16F){return 8}throw new Error("Unknown internal format "+internalFormat)}function computeBytes(shape,physicalTexType,gl,textureConfig,isPacked){var internalFormat=internalFormatForPhysicalTexType(physicalTexType,textureConfig);var numElements;if(isPacked){var _a=__read(getPackedMatrixTextureShapeWidthHeight(shape[0],shape[1]),2),packedWidth=_a[0],packedHeight=_a[1];numElements=packedWidth*packedHeight}else{var _b=__read(getUnpackedMatrixTextureShapeWidthHeight(shape[0],shape[1]),2),width=_b[0],height=_b[1];numElements=width*height}var bytesPerElement=numBytesForInternalFormat(gl,internalFormat);return numElements*bytesPerElement}function internalFormatForPhysicalTexType(physicalTexType,textureConfig){switch(physicalTexType){case PhysicalTextureType.PACKED_2X2_FLOAT32:return getInternalFormatForPackedMatrixTexture(textureConfig);case PhysicalTextureType.PACKED_2X2_FLOAT16:return getInternalFormatForFloat16PackedMatrixTexture(textureConfig);case PhysicalTextureType.UNPACKED_FLOAT32:return getInternalFormatForFloat32MatrixTexture(textureConfig);case PhysicalTextureType.UNPACKED_FLOAT16:return getInternalFormatForFloat16MatrixTexture(textureConfig);case PhysicalTextureType.PACKED_4X1_UNSIGNED_BYTE:return getInternalFormatForUnsignedBytesMatrixTexture(textureConfig);default:throw new Error("Unknown physical texture type "+physicalTexType)}}function getPhysicalTextureForRendering(isPacked){if(tf.env().getBool("WEBGL_RENDER_FLOAT32_ENABLED")){if(isPacked){return PhysicalTextureType.PACKED_2X2_FLOAT32}return PhysicalTextureType.UNPACKED_FLOAT32}if(isPacked){return PhysicalTextureType.PACKED_2X2_FLOAT16}return PhysicalTextureType.UNPACKED_FLOAT16}function getPhysicalFromLogicalTextureType(logicalTexType,isPacked){if(logicalTexType===TextureUsage.UPLOAD){return PhysicalTextureType.PACKED_2X2_FLOAT32}else if(logicalTexType===TextureUsage.RENDER||logicalTexType==null){return getPhysicalTextureForRendering(isPacked)}else if(logicalTexType===TextureUsage.DOWNLOAD||logicalTexType===TextureUsage.PIXELS){return PhysicalTextureType.PACKED_4X1_UNSIGNED_BYTE}throw new Error("Unknown logical texture type "+logicalTexType)}function getKeyFromTextureShape(shapeRowsCol,physicalTexType,isPacked){return shapeRowsCol[0]+"_"+shapeRowsCol[1]+"_"+physicalTexType+"_"+isPacked}var UnaryOpProgram=function(){function UnaryOpProgram(aShape,opSnippet){this.variableNames=["A"];this.outputShape=aShape;this.enableShapeUniforms=useShapeUniforms(this.outputShape.length);this.userCode="\n      float unaryOperation(float x) {\n        "+opSnippet+"\n      }\n\n      void main() {\n        float x = getAAtOutCoords();\n        float y = unaryOperation(x);\n\n        setOutput(y);\n      }\n    "}return UnaryOpProgram}();var CHECK_NAN_SNIPPET$2="if (isnan(x)) return x;";var LINEAR$1="return x;";var ABS$1="return abs(x);";var ELU$2="return (x >= 0.0) ? x : (exp(x) - 1.0);";var RELU$2=CHECK_NAN_SNIPPET$2+"\n  return (x < 0.0) ? 0.0 : x;\n";var RELU6$2=CHECK_NAN_SNIPPET$2+"\n  return (x < 0.0) ? 0.0 : min(6.0, x);\n";var CLONE="return x;";var SIGMOID$2="return 1.0 / (1.0 + exp(-1.0 * x));";var LINEAR="return x;";var ELU$1="\n  vec4 result;\n\n  result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);\n  result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);\n  result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);\n  result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);\n\n  return result;\n";var RELU$1="\n  vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));\n  bvec4 isNaN = isnan(x);\n\n  result.r = isNaN.r ? x.r : result.r;\n  result.g = isNaN.g ? x.g : result.g;\n  result.b = isNaN.b ? x.b : result.b;\n  result.a = isNaN.a ? x.a : result.a;\n\n  return result;\n";var RELU6$1="\n  vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));\n  bvec4 isNaN = isnan(x);\n\n  result.r = isNaN.r ? x.r : result.r;\n  result.g = isNaN.g ? x.g : result.g;\n  result.b = isNaN.b ? x.b : result.b;\n  result.a = isNaN.a ? x.a : result.a;\n\n  return result;\n";var SIGMOID$1="return 1.0 / (1.0 + exp(-1.0 * x));";var UnaryOpPackedProgram=function(){function UnaryOpPackedProgram(aShape,opSnippet){this.variableNames=["A"];this.packedInputs=true;this.packedOutput=true;this.outputShape=aShape;this.enableShapeUniforms=useShapeUniforms(this.outputShape.length);this.userCode="\n      vec4 unaryOperation(vec4 x) {\n        "+opSnippet+"\n      }\n\n      void main() {\n        vec4 x = getAAtOutCoords();\n        vec4 y = unaryOperation(x);\n\n        setOutput(y);\n      }\n    "}return UnaryOpPackedProgram}();var UnpackProgram=function(){function UnpackProgram(outputShape){this.variableNames=["A"];this.packedInputs=true;this.packedOutput=false;this.outputShape=outputShape;var rank=outputShape.length;var channels=getChannels("rc",rank);var dtype=getCoordsDataType(rank);var sourceCoords=getSourceCoords$2(rank,channels);var innerDims=channels.slice(-2);var coords=rank<=1?"rc":"vec2("+innerDims.join(",")+")";this.userCode="\n      void main() {\n        "+dtype+" rc = getOutputCoords();\n        vec4 packedInput = getA("+sourceCoords+");\n\n        setOutput(getChannel(packedInput, "+coords+"));\n      }\n    "}return UnpackProgram}();var whereImpl=tf.kernel_impls.whereImpl;var EPSILON_FLOAT32=1e-7;var EPSILON_FLOAT16=1e-4;var binaryCaches={};function getBinaryCache(webGLVersion){if(webGLVersion in binaryCaches){return binaryCaches[webGLVersion]}binaryCaches[webGLVersion]={};return binaryCaches[webGLVersion]}var CPU_HANDOFF_SIZE_THRESHOLD=tf.env().getNumber("CPU_HANDOFF_SIZE_THRESHOLD");var BEFORE_PAGING_CONSTANT=600;function numMBBeforeWarning(){if(tf.env().global.screen==null){return 1024}return tf.env().global.screen.height*tf.env().global.screen.width*window.devicePixelRatio*BEFORE_PAGING_CONSTANT/1024/1024}var MathBackendWebGL=function(_super){__extends(MathBackendWebGL,_super);function MathBackendWebGL(gpgpu){var _this=_super.call(this)||this;_this.pendingRead=new WeakMap;_this.pendingDisposal=new WeakSet;_this.dataRefCount=new WeakMap;_this.numBytesInGPU=0;_this.uploadWaitMs=0;_this.downloadWaitMs=0;_this.lastGlFlushTime=0;_this.warnedAboutMemory=false;_this.pendingDeletes=0;_this.disposed=false;if(!tf.env().getBool("HAS_WEBGL")){throw new Error("WebGL is not supported on this device")}if(gpgpu==null){var gl=getWebGLContext(tf.env().getNumber("WEBGL_VERSION"));_this.binaryCache=getBinaryCache(tf.env().getNumber("WEBGL_VERSION"));_this.gpgpu=new GPGPUContext(gl);_this.canvas=gl.canvas;_this.gpgpuCreatedLocally=true}else{_this.gpgpu=gpgpu;_this.binaryCache={};_this.gpgpuCreatedLocally=false;_this.canvas=gpgpu.gl.canvas}_this.textureManager=new TextureManager(_this.gpgpu);_this.numMBBeforeWarning=numMBBeforeWarning();_this.texData=new tf.DataStorage(_this,tf.engine());return _this}MathBackendWebGL.prototype.nextDataId=function(){return MathBackendWebGL.nextDataId++};MathBackendWebGL.prototype.numDataIds=function(){return this.texData.numDataIds()-this.pendingDeletes};MathBackendWebGL.prototype.write=function(values,shape,dtype){if(tf.env().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||tf.env().getBool("DEBUG")){this.checkNumericalProblems(values)}if(dtype==="complex64"&&values!=null){throw new Error("Cannot write to a complex64 dtype. "+"Please use tf.complex(real, imag).")}var dataId={id:this.nextDataId()};this.texData.set(dataId,{shape:shape,dtype:dtype,values:values,usage:TextureUsage.UPLOAD,refCount:1});return dataId};MathBackendWebGL.prototype.refCount=function(dataId){if(this.texData.has(dataId)){var tensorData=this.texData.get(dataId);return tensorData.refCount}return 0};MathBackendWebGL.prototype.incRef=function(dataId){var texData=this.texData.get(dataId);texData.refCount++};MathBackendWebGL.prototype.decRef=function(dataId){if(this.texData.has(dataId)){var texData=this.texData.get(dataId);texData.refCount--}};MathBackendWebGL.prototype.move=function(dataId,values,shape,dtype,refCount){if(tf.env().getBool("DEBUG")){this.checkNumericalProblems(values)}if(dtype==="complex64"){throw new Error("Cannot write to a complex64 dtype. "+"Please use tf.complex(real, imag).")}this.texData.set(dataId,{shape:shape,dtype:dtype,values:values,usage:TextureUsage.UPLOAD,refCount:refCount})};MathBackendWebGL.prototype.disposeIntermediateTensorInfo=function(tensorInfo){this.disposeData(tensorInfo.dataId)};MathBackendWebGL.prototype.readSync=function(dataId){var texData=this.texData.get(dataId);var values=texData.values,dtype=texData.dtype,complexTensorInfos=texData.complexTensorInfos,slice=texData.slice,shape=texData.shape,isPacked=texData.isPacked;if(slice!=null){var program=void 0;if(isPacked){program=new UnaryOpPackedProgram(shape,CLONE)}else{program=new UnaryOpProgram(shape,CLONE)}var res=this.runWebGLProgram(program,[{dataId:dataId,shape:shape,dtype:dtype}],dtype);var data=this.readSync(res.dataId);this.disposeIntermediateTensorInfo(res);return data}if(values!=null){return this.convertAndCacheOnCPU(dataId)}if(dtype==="string"){return values}var shouldTimeProgram=this.activeTimers!=null;var start;if(shouldTimeProgram){start=tf.util.now()}var result;if(dtype==="complex64"){var realValues=this.readSync(complexTensorInfos.real.dataId);var imagValues=this.readSync(complexTensorInfos.imag.dataId);result=tf.backend_util.mergeRealAndImagArrays(realValues,imagValues)}else{result=this.getValuesFromTexture(dataId)}if(shouldTimeProgram){this.downloadWaitMs+=tf.util.now()-start}return this.convertAndCacheOnCPU(dataId,result)};MathBackendWebGL.prototype.read=function(dataId){return __awaiter(this,void 0,void 0,function(){var subscribers_1,texData,values,shape,slice,dtype,complexTensorInfos,isPacked,program,res,data,buffer,tmpDownloadTarget,tmpData,vals,ps,realValues,imagValues,size,gl_1,dTypeVals,subscribers;var _b;return __generator(this,function(_c){switch(_c.label){case 0:if(this.pendingRead.has(dataId)){subscribers_1=this.pendingRead.get(dataId);return[2,new Promise(function(resolve){return subscribers_1.push(resolve)})]}texData=this.texData.get(dataId);values=texData.values,shape=texData.shape,slice=texData.slice,dtype=texData.dtype,complexTensorInfos=texData.complexTensorInfos,isPacked=texData.isPacked;if(slice!=null){program=void 0;if(isPacked){program=new UnaryOpPackedProgram(shape,CLONE)}else{program=new UnaryOpProgram(shape,CLONE)}res=this.runWebGLProgram(program,[{dataId:dataId,shape:shape,dtype:dtype}],dtype);data=this.read(res.dataId);this.disposeIntermediateTensorInfo(res);return[2,data]}if(values!=null){return[2,this.convertAndCacheOnCPU(dataId)]}if(!tf.env().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&tf.env().getNumber("WEBGL_VERSION")===2){throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and "+"WEBGL_VERSION=2 not yet supported.")}buffer=null;if(dtype!=="complex64"&&tf.env().get("WEBGL_BUFFER_SUPPORTED")){tmpDownloadTarget=this.decode(dataId);tmpData=this.texData.get(tmpDownloadTarget.dataId);buffer=(_b=this.gpgpu).createBufferFromTexture.apply(_b,__spread([tmpData.texture],getDenseTexShape(shape)))}this.pendingRead.set(dataId,[]);if(!(dtype!=="complex64"))return[3,2];return[4,this.gpgpu.createAndWaitForFence()];case 1:_c.sent();_c.label=2;case 2:if(!(dtype==="complex64"))return[3,4];return[4,Promise.all([this.read(complexTensorInfos.real.dataId),this.read(complexTensorInfos.imag.dataId)])];case 3:ps=_c.sent();realValues=ps[0];imagValues=ps[1];vals=tf.backend_util.mergeRealAndImagArrays(realValues,imagValues);return[3,5];case 4:if(buffer==null){vals=this.getValuesFromTexture(dataId)}else{size=tf.util.sizeFromShape(shape);vals=this.gpgpu.downloadFloat32MatrixFromBuffer(buffer,size)}_c.label=5;case 5:if(tmpDownloadTarget!=null){this.disposeIntermediateTensorInfo(tmpDownloadTarget)}if(buffer!=null){gl_1=this.gpgpu.gl;callAndCheck(gl_1,function(){return gl_1.deleteBuffer(buffer)})}dTypeVals=this.convertAndCacheOnCPU(dataId,vals);subscribers=this.pendingRead.get(dataId);this.pendingRead.delete(dataId);subscribers.forEach(function(resolve){return resolve(dTypeVals)});if(this.pendingDisposal.has(dataId)){this.pendingDisposal.delete(dataId);if(this.disposeData(dataId)){tf.engine().removeDataId(dataId,this)}this.pendingDeletes--}return[2,dTypeVals]}})})};MathBackendWebGL.prototype.bufferSync=function(t){var data=this.readSync(t.dataId);var decodedData=data;if(t.dtype==="string"){try{decodedData=data.map(function(d){return tf.util.decodeString(d)})}catch(_a){throw new Error("Failed to decode encoded string bytes into utf-8")}}return tf.buffer(t.shape,t.dtype,decodedData)};MathBackendWebGL.prototype.checkNumericalProblems=function(values){if(values==null){return}for(var i=0;i<values.length;i++){var num=values[i];if(!canBeRepresented(num)){if(tf.env().getBool("WEBGL_RENDER_FLOAT32_CAPABLE")){throw Error("The value "+num+" cannot be represented with your "+"current settings. Consider enabling float32 rendering: "+"'tf.env().set('WEBGL_RENDER_FLOAT32_ENABLED', true);'")}throw Error("The value "+num+" cannot be represented on this device.")}}};MathBackendWebGL.prototype.getValuesFromTexture=function(dataId){var _b;var _c=this.texData.get(dataId),shape=_c.shape,dtype=_c.dtype,isPacked=_c.isPacked;var size=tf.util.sizeFromShape(shape);if(tf.env().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")){var tmpTarget=this.decode(dataId);var tmpData_1=this.texData.get(tmpTarget.dataId);var vals_1=(_b=this.gpgpu).downloadMatrixFromPackedTexture.apply(_b,__spread([tmpData_1.texture],getDenseTexShape(shape))).subarray(0,size);this.disposeIntermediateTensorInfo(tmpTarget);return vals_1}var shouldUsePackedProgram=tf.env().getBool("WEBGL_PACK")&&isPacked===true;var outputShape=shouldUsePackedProgram?getShapeAs3D(shape):shape;var program=shouldUsePackedProgram?new EncodeFloatPackedProgram(outputShape):new EncodeFloatProgram(outputShape);var output=this.runWebGLProgram(program,[{shape:outputShape,dtype:dtype,dataId:dataId}],"float32");var tmpData=this.texData.get(output.dataId);var vals=this.gpgpu.downloadByteEncodedFloatMatrixFromOutputTexture(tmpData.texture,tmpData.texShape[0],tmpData.texShape[1]).subarray(0,size);this.disposeIntermediateTensorInfo(output);return vals};MathBackendWebGL.prototype.timerAvailable=function(){return tf.env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0};MathBackendWebGL.prototype.time=function(f){return __awaiter(this,void 0,void 0,function(){var oldActiveTimers,newActiveTimers,outerMostTime,flattenedActiveTimerQueries,flattenedActiveTimerNames,res,kernelMs_1;return __generator(this,function(_b){switch(_b.label){case 0:oldActiveTimers=this.activeTimers;newActiveTimers=[];outerMostTime=false;if(this.programTimersStack==null){this.programTimersStack=newActiveTimers;outerMostTime=true}else{this.activeTimers.push(newActiveTimers)}this.activeTimers=newActiveTimers;f();flattenedActiveTimerQueries=tf.util.flatten(this.activeTimers.map(function(d){return d.query})).filter(function(d){return d!=null});flattenedActiveTimerNames=tf.util.flatten(this.activeTimers.map(function(d){return d.name})).filter(function(d){return d!=null});this.activeTimers=oldActiveTimers;if(outerMostTime){this.programTimersStack=null}res={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};if(!(tf.env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0))return[3,2];return[4,Promise.all(flattenedActiveTimerQueries)];case 1:kernelMs_1=_b.sent();res["kernelMs"]=tf.util.sum(kernelMs_1);res["getExtraProfileInfo"]=function(){return kernelMs_1.map(function(d,i){return{name:flattenedActiveTimerNames[i],ms:d}}).map(function(d){return d.name+": "+d.ms}).join(", ")};return[3,3];case 2:res["kernelMs"]={error:"WebGL query timers are not supported in this environment."};_b.label=3;case 3:this.uploadWaitMs=0;this.downloadWaitMs=0;return[2,res]}})})};MathBackendWebGL.prototype.memory=function(){return{unreliable:false,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}};MathBackendWebGL.prototype.startTimer=function(){if(tf.env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){return this.gpgpu.beginQuery()}return{startMs:tf.util.now(),endMs:null}};MathBackendWebGL.prototype.endTimer=function(query){if(tf.env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){this.gpgpu.endQuery();return query}query.endMs=tf.util.now();return query};MathBackendWebGL.prototype.getQueryTime=function(query){return __awaiter(this,void 0,void 0,function(){var timerQuery;return __generator(this,function(_b){if(tf.env().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){return[2,this.gpgpu.waitForQueryAndGetTime(query)]}timerQuery=query;return[2,timerQuery.endMs-timerQuery.startMs]})})};MathBackendWebGL.prototype.disposeData=function(dataId,force){if(force===void 0){force=false}if(this.pendingDisposal.has(dataId)){return false}if(!this.texData.has(dataId)){return true}if(force){this.texData.get(dataId).refCount=0}else{this.texData.get(dataId).refCount--}if(!force&&this.texData.get(dataId).refCount>0){return false}if(this.pendingRead.has(dataId)){this.pendingDisposal.add(dataId);this.pendingDeletes++;return false}this.releaseGPUData(dataId);var complexTensorInfos=this.texData.get(dataId).complexTensorInfos;if(complexTensorInfos!=null){this.disposeData(complexTensorInfos.real.dataId,force);this.disposeData(complexTensorInfos.imag.dataId,force)}this.texData.delete(dataId);return true};MathBackendWebGL.prototype.releaseGPUData=function(dataId){var _b=this.texData.get(dataId),texture=_b.texture,dtype=_b.dtype,texShape=_b.texShape,usage=_b.usage,isPacked=_b.isPacked,slice=_b.slice;var key=slice&&slice.origDataId||dataId;var refCount=this.dataRefCount.get(key);if(refCount>1){this.dataRefCount.set(key,refCount-1)}else{this.dataRefCount.delete(key);if(texture!=null){this.numBytesInGPU-=this.computeBytes(texShape,dtype);this.textureManager.releaseTexture(texture,texShape,usage,isPacked)}}var texData=this.texData.get(dataId);texData.texture=null;texData.texShape=null;texData.isPacked=false;texData.slice=null};MathBackendWebGL.prototype.getTexture=function(dataId){this.uploadToGPU(dataId);return this.texData.get(dataId).texture};MathBackendWebGL.prototype.getDataInfo=function(dataId){return this.texData.get(dataId)};MathBackendWebGL.prototype.shouldExecuteOnCPU=function(inputs,sizeThreshold){var _this=this;if(sizeThreshold===void 0){sizeThreshold=CPU_HANDOFF_SIZE_THRESHOLD}return tf.env().getBool("WEBGL_CPU_FORWARD")&&inputs.every(function(input){return _this.texData.get(input.dataId).texture==null&&tf.util.sizeFromShape(input.shape)<sizeThreshold})};MathBackendWebGL.prototype.getGPGPUContext=function(){return this.gpgpu};MathBackendWebGL.prototype.where=function(condition){tf.backend_util.warn("tf.where() in webgl locks the UI thread. "+"Call tf.whereAsync() instead");var condVals=condition.dataSync();return whereImpl(condition.shape,condVals)};MathBackendWebGL.prototype.packedUnaryOp=function(x,op,dtype){var program=new UnaryOpPackedProgram(x.shape,op);var outInfo=this.compileAndRun(program,[x],dtype);return tf.engine().makeTensorFromDataId(outInfo.dataId,outInfo.shape,outInfo.dtype)};MathBackendWebGL.prototype.abs=function(x){if(this.shouldExecuteOnCPU([x])&&x.dtype!=="complex64"){var outValues=simpleAbsImplCPU(this.texData.get(x.dataId).values);return this.makeOutput(x.shape,x.dtype,outValues)}if(tf.env().getBool("WEBGL_PACK_UNARY_OPERATIONS")){return this.packedUnaryOp(x,ABS$1,x.dtype)}var program=new UnaryOpProgram(x.shape,ABS$1);var outInfo=this.compileAndRun(program,[x]);return tf.engine().makeTensorFromDataId(outInfo.dataId,outInfo.shape,outInfo.dtype)};MathBackendWebGL.prototype.makeTensorInfo=function(shape,dtype,values){var dataId;if(dtype==="string"&&values!=null&&values.length>0&&tf.util.isString(values[0])){var encodedValues=values.map(function(d){return tf.util.encodeString(d)});dataId=this.write(encodedValues,shape,dtype)}else{dataId=this.write(values,shape,dtype)}this.texData.get(dataId).usage=null;return{dataId:dataId,shape:shape,dtype:dtype}};MathBackendWebGL.prototype.makeOutput=function(shape,dtype,values){var dataId=this.makeTensorInfo(shape,dtype,values).dataId;return tf.engine().makeTensorFromDataId(dataId,shape,dtype,this)};MathBackendWebGL.prototype.unpackTensor=function(input){var program=new UnpackProgram(input.shape);return this.runWebGLProgram(program,[input],input.dtype)};MathBackendWebGL.prototype.packTensor=function(input){var program=new PackProgram(input.shape);var preventEagerUnpackingOutput=true;return this.runWebGLProgram(program,[input],input.dtype,null,preventEagerUnpackingOutput)};MathBackendWebGL.prototype.packedReshape=function(input,afterShape){var input3DShape=__spread([getBatchDim(input.shape)],getRowsCols(input.shape));var input3D={dtype:input.dtype,shape:input3DShape,dataId:input.dataId};var afterShapeAs3D=__spread([getBatchDim(afterShape)],getRowsCols(afterShape));var program=new ReshapePackedProgram(afterShapeAs3D,input3DShape);var preventEagerUnpackingOfOutput=true;var customValues=[input3DShape];var output=this.runWebGLProgram(program,[input3D],input.dtype,customValues,preventEagerUnpackingOfOutput);return{dataId:output.dataId,shape:afterShape,dtype:output.dtype}};MathBackendWebGL.prototype.decode=function(dataId){var texData=this.texData.get(dataId);var isPacked=texData.isPacked,shape=texData.shape,dtype=texData.dtype;var shapeAs3D=getShapeAs3D(shape);var program;var denseTexShape=getDenseTexShape(shapeAs3D);if(isPacked){program=new DecodeMatrixPackedProgram(shapeAs3D)}else{program=new DecodeMatrixProgram(shapeAs3D)}var preventEagerUnpackingOfOutput=true;var customValues=[denseTexShape];var out=this.runWebGLProgram(program,[{shape:shapeAs3D,dtype:dtype,dataId:dataId}],dtype,customValues,preventEagerUnpackingOfOutput);return{dtype:dtype,shape:shape,dataId:out.dataId}};MathBackendWebGL.prototype.runWebGLProgram=function(program,inputs,outputDtype,customUniformValues,preventEagerUnpackingOfOutput){var _this=this;if(preventEagerUnpackingOfOutput===void 0){preventEagerUnpackingOfOutput=false}var output=this.makeTensorInfo(program.outputShape,outputDtype);var outData=this.texData.get(output.dataId);if(program.packedOutput){outData.isPacked=true}if(program.outPackingScheme===PackingScheme.DENSE){var texelShape=getDenseTexShape(program.outputShape);outData.texShape=texelShape.map(function(d){return d*2})}if(program.outTexUsage!=null){outData.usage=program.outTexUsage}if(tf.util.sizeFromShape(output.shape)===0){outData.values=tf.util.getTypedArrayFromDType(output.dtype,0);return output}var dataToDispose=[];var inputsData=inputs.map(function(input){if(input.dtype==="complex64"){throw new Error("GPGPUProgram does not support complex64 input. For complex64 "+"dtypes, please separate the program into real and imaginary "+"parts.")}var texData=_this.texData.get(input.dataId);if(texData.texture==null){if(!program.packedInputs&&tf.util.sizeFromShape(input.shape)<=tf.env().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM")){return{shape:input.shape,texData:null,isUniform:true,uniformValues:texData.values}}if(program.packedInputs){texData.isPacked=true;texData.shape=input.shape}}else if(!!texData.isPacked!==!!program.packedInputs){input=texData.isPacked?_this.unpackTensor(input):_this.packTensor(input);dataToDispose.push(input);texData=_this.texData.get(input.dataId)}else if(texData.isPacked&&!isReshapeFree(texData.shape,input.shape)){var savedInput=input;var targetShape=input.shape;input.shape=texData.shape;input=_this.packedReshape(input,targetShape);dataToDispose.push(input);texData=_this.texData.get(input.dataId);savedInput.shape=targetShape}_this.uploadToGPU(input.dataId);return{shape:input.shape,texData:texData,isUniform:false}});this.uploadToGPU(output.dataId);var outputData={shape:output.shape,texData:outData,isUniform:false};var key=makeShaderKey(program,inputsData,outputData);var binary=this.getAndSaveBinary(key,function(){return compileProgram(_this.gpgpu,program,inputsData,outputData)});var shouldTimeProgram=this.activeTimers!=null;var query;if(shouldTimeProgram){query=this.startTimer()}runProgram(this.gpgpu,binary,inputsData,outputData,customUniformValues);dataToDispose.forEach(function(info){return _this.disposeIntermediateTensorInfo(info)});if(shouldTimeProgram){query=this.endTimer(query);this.activeTimers.push({name:program.constructor.name,query:this.getQueryTime(query)})}var glFlushThreshold=tf.env().get("WEBGL_FLUSH_THRESHOLD");if(glFlushThreshold>0){var time=tf.util.now();if(time-this.lastGlFlushTime>glFlushThreshold){this.gpgpu.gl.flush();this.lastGlFlushTime=time}}if(!tf.env().getBool("WEBGL_LAZILY_UNPACK")&&outData.isPacked&&preventEagerUnpackingOfOutput===false){var unpacked=this.unpackTensor(output);this.disposeIntermediateTensorInfo(output);return unpacked}return output};MathBackendWebGL.prototype.compileAndRun=function(program,inputs,outputDtype,customUniformValues,preventEagerUnpackingOfOutput){if(preventEagerUnpackingOfOutput===void 0){preventEagerUnpackingOfOutput=false}outputDtype=outputDtype||inputs[0].dtype;var outInfo=this.runWebGLProgram(program,inputs,outputDtype,customUniformValues,preventEagerUnpackingOfOutput);return outInfo};MathBackendWebGL.prototype.getAndSaveBinary=function(key,getBinary){if(!(key in this.binaryCache)){this.binaryCache[key]=getBinary()}return this.binaryCache[key]};MathBackendWebGL.prototype.getTextureManager=function(){return this.textureManager};MathBackendWebGL.prototype.dispose=function(){var _this=this;if(this.disposed){return}if(!tf.env().getBool("IS_TEST")){var allKeys=Object.keys(this.binaryCache);allKeys.forEach(function(key){_this.gpgpu.deleteProgram(_this.binaryCache[key].webGLProgram);delete _this.binaryCache[key]})}this.textureManager.dispose();if(this.canvas!=null&&(typeof HTMLCanvasElement!=="undefined"&&this.canvas instanceof HTMLCanvasElement)){this.canvas.remove()}else{this.canvas=null}if(this.gpgpuCreatedLocally){this.gpgpu.program=null;this.gpgpu.dispose()}this.disposed=true};MathBackendWebGL.prototype.floatPrecision=function(){var _this=this;if(this.floatPrecisionValue==null){this.floatPrecisionValue=tf.tidy(function(){if(!tf.env().get("WEBGL_RENDER_FLOAT32_ENABLED")){var debugFlag=tf.env().getBool("DEBUG");tf.env().set("DEBUG",false);var underflowCheckValue=_this.abs(tf.scalar(1e-8)).dataSync()[0];tf.env().set("DEBUG",debugFlag);if(underflowCheckValue>0){return 32}}return 16})}return this.floatPrecisionValue};MathBackendWebGL.prototype.epsilon=function(){return this.floatPrecision()===32?EPSILON_FLOAT32:EPSILON_FLOAT16};MathBackendWebGL.prototype.uploadToGPU=function(dataId){var _b;var texData=this.texData.get(dataId);var shape=texData.shape,dtype=texData.dtype,values=texData.values,texture=texData.texture,usage=texData.usage,isPacked=texData.isPacked;if(texture!=null){return}var shouldTimeProgram=this.activeTimers!=null;var start;if(shouldTimeProgram){start=tf.util.now()}var texShape=texData.texShape;if(texShape==null){texShape=getTextureShapeFromLogicalShape(shape,isPacked);texData.texShape=texShape}if(values!=null){var shapeAs3D=getShapeAs3D(shape);var program=void 0;var width=texShape[1],height=texShape[0];var isByteArray=values instanceof Uint8Array||values instanceof Uint8ClampedArray;if(isPacked){_b=__read(getPackedMatrixTextureShapeWidthHeight(texShape[0],texShape[1]),2),width=_b[0],height=_b[1];program=new EncodeMatrixPackedProgram(shapeAs3D,isByteArray)}else{program=new EncodeMatrixProgram(shapeAs3D,isByteArray)}var tempDenseInputHandle=this.makeTensorInfo([height,width],dtype);if(isByteArray){this.texData.get(tempDenseInputHandle.dataId).usage=TextureUsage.PIXELS}else{this.texData.get(tempDenseInputHandle.dataId).usage=TextureUsage.UPLOAD}this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(tempDenseInputHandle.dataId),width,height,values);var customValues=[[height,width]];var preventEagerUnpacking=true;var encodedOutputTarget=this.runWebGLProgram(program,[tempDenseInputHandle],dtype,customValues,preventEagerUnpacking);var outputTexData=this.texData.get(encodedOutputTarget.dataId);texData.texture=outputTexData.texture;texData.texShape=outputTexData.texShape;texData.isPacked=outputTexData.isPacked;texData.usage=outputTexData.usage;this.disposeIntermediateTensorInfo(tempDenseInputHandle);this.texData.delete(encodedOutputTarget.dataId);texData.values=null;if(shouldTimeProgram){this.uploadWaitMs+=tf.util.now()-start}}else{var newTexture=this.acquireTexture(texShape,usage,dtype,isPacked);texData.texture=newTexture}};MathBackendWebGL.prototype.convertAndCacheOnCPU=function(dataId,float32Values){var texData=this.texData.get(dataId);var dtype=texData.dtype;this.releaseGPUData(dataId);if(float32Values!=null){texData.values=float32ToTypedArray(float32Values,dtype)}return texData.values};MathBackendWebGL.prototype.acquireTexture=function(texShape,texType,dtype,isPacked){this.numBytesInGPU+=this.computeBytes(texShape,dtype);if(!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){var mb=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=true;console.warn("High memory usage in GPU: "+mb+" MB, "+"most likely due to a memory leak")}return this.textureManager.acquireTexture(texShape,texType,isPacked)};MathBackendWebGL.prototype.computeBytes=function(shape,dtype){return shape[0]*shape[1]*tf.util.bytesPerElement(dtype)};return MathBackendWebGL}(tf.KernelBackend);MathBackendWebGL.nextDataId=0;function float32ToTypedArray(a,dtype){if(dtype==="float32"||dtype==="complex64"){return a}else if(dtype==="int32"||dtype==="bool"){var result=dtype==="int32"?new Int32Array(a.length):new Uint8Array(a.length);for(var i=0;i<result.length;++i){result[i]=Math.round(a[i])}return result}else{throw new Error("Unknown dtype "+dtype)}}var version="3.10.0";function forceHalfFloat(){tf.env().set("WEBGL_FORCE_F16_TEXTURES",true)}if(tf.device_util.isBrowser()){tf.registerBackend("webgl",function(){return new MathBackendWebGL},2)}var webgl={forceHalfFloat:forceHalfFloat};var CHECK_NAN_SNIPPET$1="\n  if (isnan(a)) return a;\n  if (isnan(b)) return b;\n";var BinaryOpProgram=function(){function BinaryOpProgram(op,aShape,bShape){this.variableNames=["A","B"];this.outputShape=tf.backend_util.assertAndGetBroadcastShape(aShape,bShape);this.enableShapeUniforms=useShapeUniforms(this.outputShape.length);this.userCode="\n      float binaryOperation(float a, float b) {\n        "+op+"\n      }\n\n      void main() {\n        float a = getAAtOutCoords();\n        float b = getBAtOutCoords();\n        setOutput(binaryOperation(a, b));\n      }\n    "}return BinaryOpProgram}();var CHECK_NAN_SNIPPET="\n  result.r = isNaN.r > 0. ? NAN : result.r;\n  result.g = isNaN.g > 0. ? NAN : result.g;\n  result.b = isNaN.b > 0. ? NAN : result.b;\n  result.a = isNaN.a > 0. ? NAN : result.a;\n";var BinaryOpPackedProgram=function(){function BinaryOpPackedProgram(op,aShape,bShape,checkOutOfBounds){if(checkOutOfBounds===void 0){checkOutOfBounds=false}this.variableNames=["A","B"];this.supportsBroadcasting=true;this.packedInputs=true;this.packedOutput=true;this.outputShape=tf.backend_util.assertAndGetBroadcastShape(aShape,bShape);var rank=this.outputShape.length;this.enableShapeUniforms=useShapeUniforms(rank);var checkOutOfBoundsString="";if(checkOutOfBounds){if(rank===0||tf.util.sizeFromShape(this.outputShape)===1){checkOutOfBoundsString="\n          result.y = 0.;\n          result.z = 0.;\n          result.w = 0.;\n        "}else{var dtype=getCoordsDataType(rank);checkOutOfBoundsString="\n          "+dtype+" coords = getOutputCoords();\n        ";if(rank===1){if(this.enableShapeUniforms){checkOutOfBoundsString+="\n            result.y = (coords + 1) >= outShape ? 0. : result.y;\n            result.z = 0.;\n            result.w = 0.;\n          "}else{checkOutOfBoundsString+="\n            result.y = (coords + 1) >= "+this.outputShape[0]+" ? 0. : result.y;\n            result.z = 0.;\n            result.w = 0.;\n          "}}else{var channels=getChannels("coords",rank);if(this.enableShapeUniforms){checkOutOfBoundsString+="\n            bool nextRowOutOfBounds =\n              ("+channels[rank-2]+" + 1) >= outShape["+rank+" - 2];\n            bool nextColOutOfBounds =\n              ("+channels[rank-1]+" + 1) >= outShape["+rank+" - 1];\n            result.y = nextColOutOfBounds ? 0. : result.y;\n            result.z = nextRowOutOfBounds ? 0. : result.z;\n            result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;\n          "}else{checkOutOfBoundsString+="\n            bool nextRowOutOfBounds =\n              ("+channels[rank-2]+" + 1) >= "+this.outputShape[rank-2]+";\n            bool nextColOutOfBounds =\n              ("+channels[rank-1]+" + 1) >= "+this.outputShape[rank-1]+";\n            result.y = nextColOutOfBounds ? 0. : result.y;\n            result.z = nextRowOutOfBounds ? 0. : result.z;\n            result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;\n          "}}}}this.userCode="\n      vec4 binaryOperation(vec4 a, vec4 b) {\n        "+op+"\n      }\n\n      void main() {\n        vec4 a = getAAtOutCoords();\n        vec4 b = getBAtOutCoords();\n\n        vec4 result = binaryOperation(a, b);\n        "+checkOutOfBoundsString+"\n\n        setOutput(result);\n      }\n    "}return BinaryOpPackedProgram}();function identity(args){var inputs=args.inputs,backend=args.backend;var x=inputs.x;backend.incRef(x.dataId);return{dataId:x.dataId,shape:x.shape,dtype:x.dtype}}var identityConfig={kernelName:tf.Identity,backendName:"webgl",kernelFunc:identity};function complex(args){var inputs=args.inputs,backend=args.backend;var real=inputs.real,imag=inputs.imag;var complexInfo=backend.makeTensorInfo(real.shape,"complex64");var complex=backend.texData.get(complexInfo.dataId);var realTensorInfo=identity({inputs:{x:real},backend:backend});var imagTensorInfo=identity({inputs:{x:imag},backend:backend});complex.complexTensorInfos={real:realTensorInfo,imag:imagTensorInfo};return complexInfo}var complexConfig={kernelName:tf.Complex,backendName:"webgl",kernelFunc:complex};var LEAKYRELU="return (a < 0.) ? b * a : a;";var LEAKYRELU_PACKED="\n  vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n  return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n";function leakyRelu(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var alpha=attrs.alpha;var $alpha=backend.makeTensorInfo([],"float32",tf.util.createScalarValue(alpha,"float32"));var program=tf.env().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new BinaryOpPackedProgram(LEAKYRELU_PACKED,x.shape,$alpha.shape):new BinaryOpProgram(LEAKYRELU,x.shape,$alpha.shape);var result=backend.runWebGLProgram(program,[x,$alpha],"float32");backend.disposeIntermediateTensorInfo($alpha);return result}var leakyReluConfig={kernelName:tf.LeakyRelu,backendName:"webgl",kernelFunc:leakyRelu};var PRELU="return (a < 0.) ? b * a : a;";var PRELU_PACKED="\n  vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n  return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n";function prelu(args){var inputs=args.inputs,backend=args.backend;var x=inputs.x,alpha=inputs.alpha;var program=tf.env().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new BinaryOpPackedProgram(PRELU_PACKED,x.shape,alpha.shape):new BinaryOpProgram(PRELU,x.shape,alpha.shape);return backend.runWebGLProgram(program,[x,alpha],"float32")}var preluConfig={kernelName:tf.Prelu,backendName:"webgl",kernelFunc:prelu};var CHECK_NAN_SNIPPET_UNARY="if (isnan(x)) return x;";var CHECK_NAN_SNIPPET_BINARY="\n  if (isnan(a)) return a;\n  if (isnan(b)) return b;\n";var CHECK_NAN_SNIPPET_BINARY_PACKED="\n  result.r = isNaN.r > 0. ? NAN : result.r;\n  result.g = isNaN.g > 0. ? NAN : result.g;\n  result.b = isNaN.b > 0. ? NAN : result.b;\n  result.a = isNaN.a > 0. ? NAN : result.a;\n";function unaryKernelFunc(_a){var opSnippet=_a.opSnippet,packedOpSnippet=_a.packedOpSnippet,cpuKernelImpl=_a.cpuKernelImpl,dtype=_a.dtype;return function(_a){var inputs=_a.inputs,backend=_a.backend;var x=inputs.x;var webglBackend=backend;var $dtype=dtype||x.dtype;if(webglBackend.shouldExecuteOnCPU([x])&&cpuKernelImpl!=null){var xData=webglBackend.texData.get(x.dataId);var outValues=cpuKernelImpl(xData.values,$dtype);return webglBackend.makeTensorInfo(x.shape,$dtype,outValues)}var shouldUsePackedProgram=tf.env().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&packedOpSnippet!=null;var program;if(shouldUsePackedProgram){program=new UnaryOpPackedProgram(x.shape,packedOpSnippet)}else{program=new UnaryOpProgram(x.shape,opSnippet)}return webglBackend.runWebGLProgram(program,[x],$dtype)}}function binaryKernelFunc(_a){var opSnippet=_a.opSnippet,packedOpSnippet=_a.packedOpSnippet,_b=_a.checkOutOfBounds,checkOutOfBounds=_b===void 0?false:_b,_c=_a.supportsComplex,supportsComplex=_c===void 0?false:_c,cpuKernelImpl=_a.cpuKernelImpl,dtype=_a.dtype;return function(_a){var inputs=_a.inputs,backend=_a.backend;var a=inputs.a,b=inputs.b;var webglBackend=backend;if(supportsComplex&&a.dtype==="complex64"){var aData=webglBackend.texData.get(a.dataId);var bData=webglBackend.texData.get(b.dataId);var _b=__read([[aData.complexTensorInfos.real,bData.complexTensorInfos.real],[aData.complexTensorInfos.imag,bData.complexTensorInfos.imag]].map(function(complexParts){var _a=__read(complexParts,2),aPart=_a[0],bPart=_a[1];var aHandle={dataId:aPart.dataId,dtype:aPart.dtype,shape:a.shape};var bHandle={dataId:bPart.dataId,dtype:bPart.dtype,shape:b.shape};var program=new BinaryOpProgram(opSnippet,a.shape,b.shape);return webglBackend.runWebGLProgram(program,[aHandle,bHandle],tf.upcastType(aPart.dtype,bPart.dtype))}),2),real=_b[0],imag=_b[1];var complexOutput=complex({inputs:{real:real,imag:imag},backend:webglBackend});webglBackend.disposeIntermediateTensorInfo(real);webglBackend.disposeIntermediateTensorInfo(imag);return complexOutput}var $dtype=dtype||tf.upcastType(a.dtype,b.dtype);if((a.dtype==="string"||b.dtype==="string"||webglBackend.shouldExecuteOnCPU([a,b]))&&cpuKernelImpl!=null){var aVals=webglBackend.texData.get(a.dataId).values;var bVals=webglBackend.texData.get(b.dataId).values;var decodedAVals=a.dtype==="string"?tf.backend_util.fromUint8ToStringArray(aVals):aVals;var decodedBVals=a.dtype==="string"?tf.backend_util.fromUint8ToStringArray(bVals):bVals;var _c=__read(cpuKernelImpl(a.shape,b.shape,decodedAVals,decodedBVals,$dtype),2),outValues=_c[0],outShape=_c[1];var out=webglBackend.makeTensorInfo(outShape,$dtype);var outData=webglBackend.texData.get(out.dataId);outData.values=outValues;return out}var shouldUsePackedProgram=tf.env().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&packedOpSnippet!=null;var program;if(shouldUsePackedProgram){program=new BinaryOpPackedProgram(packedOpSnippet,a.shape,b.shape,checkOutOfBounds)}else{program=new BinaryOpProgram(opSnippet,a.shape,b.shape)}return webglBackend.runWebGLProgram(program,[a,b],$dtype)}}function mapActivationToShaderProgram(activation,packed){if(packed===void 0){packed=false}if(activation==="linear"){if(packed){return LINEAR}return LINEAR$1}else if(activation==="relu"){if(packed){return RELU$1}return RELU$2}else if(activation==="elu"){if(packed){return ELU$1}return ELU$2}else if(activation==="relu6"){if(packed){return RELU6$1}return RELU6$2}else if(activation==="prelu"){if(packed){return PRELU_PACKED}return PRELU}else if(activation==="leakyrelu"){if(packed){return LEAKYRELU_PACKED}return LEAKYRELU}else if(activation==="sigmoid"){if(packed){return SIGMOID$1}return SIGMOID$2}throw new Error("Activation "+activation+" has not been implemented for the WebGL backend.")}var MatMulPackedProgram=function(){function MatMulPackedProgram(aShape,bShape,outputShape,transposeA,transposeB,addBias,activation,hasPreluActivation,hasLeakyreluActivation){if(transposeA===void 0){transposeA=false}if(transposeB===void 0){transposeB=false}if(addBias===void 0){addBias=false}if(activation===void 0){activation=null}if(hasPreluActivation===void 0){hasPreluActivation=false}if(hasLeakyreluActivation===void 0){hasLeakyreluActivation=false}this.variableNames=["matrixA","matrixB"];this.packedInputs=true;this.packedOutput=true;this.outputShape=outputShape;this.enableShapeUniforms=useShapeUniforms(this.outputShape.length);var sharedDim=transposeA?aShape[1]:aShape[2];var sharedDimensionPacked=Math.ceil(sharedDim/2);var aSample=transposeA?"i * 2, rc.y":"rc.y, i * 2";var bSample=transposeB?"rc.z, i * 2":"i * 2, rc.z";var aSwizzle=transposeA?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"];var bSwizzle=transposeB?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"];var activationSnippet="",applyActivationSnippet="";if(activation){if(hasPreluActivation){activationSnippet="vec4 activation(vec4 a) {\n          vec4 b = getPreluActivationWeightsAtOutCoords();\n          "+activation+"\n        }"}else if(hasLeakyreluActivation){activationSnippet="vec4 activation(vec4 a) {\n          vec4 b = getLeakyreluAlphaAtOutCoords();\n          "+activation+"\n        }"}else{activationSnippet="vec4 activation(vec4 x) {\n          "+activation+"\n        }"}applyActivationSnippet="result = activation(result);"}var addBiasSnippet=addBias?"result += getBiasAtOutCoords();":"";if(addBias){this.variableNames.push("bias")}if(hasPreluActivation){this.variableNames.push("preluActivationWeights")}if(hasLeakyreluActivation){this.variableNames.push("leakyreluAlpha")}var batchASnippet="rc.x";var batchBSnippet="rc.x";if(aShape[0]<bShape[0]){batchASnippet="int(min(float(rc.x), "+(aShape[0]-1)+".))"}else if(bShape[0]<aShape[0]){batchBSnippet="int(min(float(rc.x), "+(bShape[0]-1)+".))"}this.userCode="\n      "+activationSnippet+"\n      // Don't use uniform for sharedDimensionPacked for performance.\n      const float sharedDimension = "+sharedDimensionPacked+".0;\n\n      vec4 dot2x2ARowBCol(ivec3 rc) {\n        vec4 result = vec4(0);\n        for (int i = 0; i < "+sharedDimensionPacked+"; i++) {\n          int batchA = "+batchASnippet+";\n          int batchB = "+batchBSnippet+";\n          vec4 a = getMatrixA(batchA, "+aSample+");\n          vec4 b = getMatrixB(batchB, "+bSample+");\n\n          // These swizzled products need to be separately added.\n          // See: https://github.com/tensorflow/tfjs/issues/1735\n          result += ("+aSwizzle[0]+" * "+bSwizzle[0]+");\n          result += ("+aSwizzle[1]+" * "+bSwizzle[1]+");\n        }\n        return result;\n      }\n\n      void main() {\n        ivec3 rc = getOutputCoords();\n        vec4 result = dot2x2ARowBCol(rc);\n\n        "+addBiasSnippet+"\n\n        "+applyActivationSnippet+"\n\n        setOutput(result);\n      }\n    "}return MatMulPackedProgram}();var COMPLEX_MULTIPLY={REAL:"return areal * breal - aimag * bimag;",IMAG:"return areal * bimag + aimag * breal;"};var BinaryOpComplexProgram=function(){function BinaryOpComplexProgram(op,aShape,bShape){this.variableNames=["AReal","AImag","BReal","BImag"];this.outputShape=tf.backend_util.assertAndGetBroadcastShape(aShape,bShape);this.userCode="\n      float binaryOpComplex(\n          float areal, float aimag, float breal, float bimag) {\n        "+op+"\n      }\n\n      void main() {\n        float areal = getARealAtOutCoords();\n        float aimag = getAImagAtOutCoords();\n        float breal = getBRealAtOutCoords();\n        float bimag = getBImagAtOutCoords();\n        setOutput(binaryOpComplex(areal, aimag, breal, bimag));\n      }\n    "}return BinaryOpComplexProgram}();var MUL="return a * b;";function multiply(args){var inputs=args.inputs,backend=args.backend;var a=inputs.a,b=inputs.b;var dtype=tf.backend_util.upcastType(a.dtype,b.dtype);if(a.dtype==="complex64"){var aData=backend.texData.get(a.dataId);var bData=backend.texData.get(b.dataId);var realProgram=new BinaryOpComplexProgram(COMPLEX_MULTIPLY.REAL,a.shape,b.shape);var imagProgram=new BinaryOpComplexProgram(COMPLEX_MULTIPLY.IMAG,a.shape,b.shape);var inputs_1=[{dataId:aData.complexTensorInfos.real.dataId,dtype:aData.complexTensorInfos.real.dtype,shape:a.shape},{dataId:aData.complexTensorInfos.imag.dataId,dtype:aData.complexTensorInfos.imag.dtype,shape:a.shape},{dataId:bData.complexTensorInfos.real.dataId,dtype:bData.complexTensorInfos.real.dtype,shape:b.shape},{dataId:bData.complexTensorInfos.imag.dataId,dtype:bData.complexTensorInfos.imag.dtype,shape:b.shape}];var realPart=backend.runWebGLProgram(realProgram,inputs_1,"float32");var imagPart=backend.runWebGLProgram(imagProgram,inputs_1,"float32");var complexOutput=complex({inputs:{real:realPart,imag:imagPart},backend:backend});backend.disposeIntermediateTensorInfo(realPart);backend.disposeIntermediateTensorInfo(imagPart);return complexOutput}if(backend.shouldExecuteOnCPU([a,b])){var aData=backend.texData.get(a.dataId);var bData=backend.texData.get(b.dataId);var _a=__read(multiplyImplCPU(a.shape,b.shape,aData.values,bData.values,dtype),2),outValues=_a[0],outShape=_a[1];var out=backend.makeTensorInfo(outShape,dtype);var outData=backend.texData.get(out.dataId);outData.values=outValues;return out}var program;if(tf.env().getBool("WEBGL_PACK_BINARY_OPERATIONS")){program=new BinaryOpPackedProgram(MUL,a.shape,b.shape)}else{program=new BinaryOpProgram(MUL,a.shape,b.shape)}return backend.runWebGLProgram(program,[a,b],dtype)}var multiplyConfig={kernelName:tf.Multiply,backendName:"webgl",kernelFunc:multiply};function packedReshape(input,afterShape,backend){var input3DShape=__spread([getBatchDim(input.shape)],getRowsCols(input.shape));var input3D={dtype:input.dtype,shape:input3DShape,dataId:input.dataId};var afterShapeAs3D=__spread([getBatchDim(afterShape)],getRowsCols(afterShape));var program=new ReshapePackedProgram(afterShapeAs3D,input3DShape);var preventEagerUnpackingOfOutput=true;var customValues=[input3DShape];var output=backend.runWebGLProgram(program,[input3D],input.dtype,customValues,preventEagerUnpackingOfOutput);return{dataId:output.dataId,shape:afterShape,dtype:output.dtype}}function reshape(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var shape=attrs.shape;var webglBackend=backend;var xSize=tf.util.sizeFromShape(x.shape);var $shape=tf.util.inferFromImplicitShape(shape,xSize);var $xSize=tf.util.sizeFromShape($shape);tf.util.assert(xSize===$xSize,function(){return"The new shape ("+$shape+") has "+$xSize+" elements and the old "+("shape ("+x.shape+") has "+xSize+" elements. The new shape and old ")+"shape must have the same number of elements."});var xTexData=webglBackend.texData.get(x.dataId);if(xTexData.isPacked&&!isReshapeFree(x.shape,$shape)&&!(xTexData.texture!==null&&isReshapeFree(xTexData.shape,$shape))){return packedReshape(x,$shape,webglBackend)}webglBackend.incRef(x.dataId);return{dataId:x.dataId,shape:$shape,dtype:x.dtype}}var reshapeConfig={kernelName:tf.Reshape,backendName:"webgl",kernelFunc:reshape};var MeanProgram=function(){function MeanProgram(reduceInfo,divisor){this.variableNames=["x"];var windowSize=reduceInfo.windowSize,batchSize=reduceInfo.batchSize,inSize=reduceInfo.inSize,outSize=reduceInfo.outSize;this.outputShape=[batchSize,outSize];var windowSizeNearestVec4=Math.floor(windowSize/4)*4;var windowSizeVec4Remainder=windowSize%4;var updateSnippet="sumValue += dot(values, ones);";if(divisor!=null){var denominator=1/divisor;updateSnippet="sumValue += dot(values * "+(tf.util.isInt(denominator)?denominator.toPrecision(2):denominator)+", ones);"}var checkOutOfBounds="";if(inSize%windowSize>0){checkOutOfBounds="\n        if (inIdx < 0 || inIdx >= "+inSize+") {\n          return 0.0;\n        }\n      "}this.userCode="\n      const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n      float getValue(int batch, int inIdx) {\n        "+checkOutOfBounds+"\n        return getX(batch, inIdx);\n      }\n\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int batch = coords[0];\n        int outIdx = coords[1];\n        int inOffset = outIdx * "+windowSize+";\n\n        float sumValue = 0.0;\n\n        for (int i = 0; i < "+windowSizeNearestVec4+"; i += 4) {\n          int inIdx = inOffset + i;\n          vec4 values = vec4(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            getValue(batch, inIdx + 2),\n            getValue(batch, inIdx + 3)\n          );\n\n          "+updateSnippet+"\n        }\n\n        int inIdx = inOffset + "+windowSizeNearestVec4+";\n        if ("+(windowSizeVec4Remainder===1)+") {\n          vec4 values = vec4(getValue(batch, inIdx), 0.0, 0.0, 0.0);\n\n          "+updateSnippet+"\n        } else if ("+(windowSizeVec4Remainder===2)+") {\n          vec4 values = vec4(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1), 0.0, 0.0);\n\n          "+updateSnippet+"\n        } else if ("+(windowSizeVec4Remainder===3)+") {\n          vec4 values = vec4(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            getValue(batch, inIdx + 2), 0.0);\n\n          "+updateSnippet+"\n        }\n        setOutput(sumValue);\n      }\n    "}return MeanProgram}();var ReduceProgram=function(){function ReduceProgram(reduceInfo,reduceType){this.variableNames=["x"];var windowSize=reduceInfo.windowSize,batchSize=reduceInfo.batchSize,inSize=reduceInfo.inSize,outSize=reduceInfo.outSize;this.outputShape=[batchSize,outSize];var initializationValue="0.0";var compareOp="";if(reduceType==="prod"){initializationValue="1.0"}else if(reduceType==="min"){initializationValue="1.0 / 1e-20";compareOp="min"}else if(reduceType==="max"){initializationValue="-1.0 / 1e-20";compareOp="max"}var returnValue=reduceType+"("+reduceType+"("+reduceType+"("+"minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";if(reduceType==="sum"){returnValue="sumValue"}else if(reduceType==="prod"){returnValue="prodValue"}else if(reduceType==="all"){returnValue="allValue"}else if(reduceType==="any"){returnValue="anyValue"}var windowSizeNearestVec4=Math.floor(windowSize/4)*4;var windowSizeVec4Remainder=windowSize%4;var updateSnippet="\n      if ("+(reduceType==="sum")+") {\n        sumValue += dot(values, ones);\n      } else if ("+(reduceType==="prod")+") {\n        vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]);\n        prodValue *= tmp[0] * tmp[1];\n      } else {\n        minMaxValue = "+compareOp+"(values, minMaxValue);\n        if ("+(reduceType==="min")+" || "+(reduceType==="max")+") {\n          minMaxValue = "+compareOp+"(values, minMaxValue);\n          bvec4 isNaN = isnan(values);\n          if (isNaN.r || isNaN.g || isNaN.b || isNaN.a) {\n            minMaxValue = vec4(NAN);\n          }\n        }\n      }\n    ";var vecType="vec4";if(reduceType==="all"){initializationValue="1.0";updateSnippet="\n        bool reducedAllValue = all(values);\n        float floatedReducedAllValue = float(reducedAllValue);\n        allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);\n      ";vecType="bvec4"}else if(reduceType==="any"){initializationValue="0.0";updateSnippet="\n        bool reducedAnyValue = any(values);\n        float floatedReducedAnyValue = float(reducedAnyValue);\n        anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);\n      ";vecType="bvec4"}var checkOutOfBounds="";if(inSize%windowSize>0){checkOutOfBounds="\n        if (inIdx < 0 || inIdx >= "+inSize+") {\n          return initializationValue;\n        }\n      "}this.userCode="\n      const float initializationValue = "+initializationValue+";\n      const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n      float getValue(int batch, int inIdx) {\n        "+checkOutOfBounds+"\n        return getX(batch, inIdx);\n      }\n\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int batch = coords[0];\n        int outIdx = coords[1];\n        int inOffset = outIdx * "+windowSize+";\n\n        vec4 minMaxValue = vec4("+initializationValue+");\n        float prodValue = 1.0;\n        float sumValue = 0.0;\n        float allValue = 1.0;\n        float anyValue = 0.0;\n\n        for (int i = 0; i < "+windowSizeNearestVec4+"; i += 4) {\n          int inIdx = inOffset + i;\n          "+vecType+" values = "+vecType+"(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            getValue(batch, inIdx + 2),\n            getValue(batch, inIdx + 3)\n          );\n\n          "+updateSnippet+"\n        }\n\n        int inIdx = inOffset + "+windowSizeNearestVec4+";\n        if ("+(windowSizeVec4Remainder===1)+") {\n          "+vecType+" values = "+vecType+"(\n            getValue(batch, inIdx),\n            initializationValue,\n            initializationValue,\n            initializationValue\n          );\n\n          "+updateSnippet+"\n        } else if ("+(windowSizeVec4Remainder===2)+") {\n          "+vecType+" values = "+vecType+"(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            initializationValue,\n            initializationValue\n          );\n\n          "+updateSnippet+"\n        } else if ("+(windowSizeVec4Remainder===3)+") {\n          "+vecType+" values = "+vecType+"(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            getValue(batch, inIdx + 2),\n            initializationValue\n          );\n\n          "+updateSnippet+"\n        }\n        setOutput("+returnValue+");\n      }\n    "}return ReduceProgram}();function getReductionStages(inShape){var stages=[];while(stages.length===0||stages[stages.length-1].outSize!==1){var outSize=stages.length?stages[stages.length-1].outSize:inShape[1];var windowSize=tf.backend_util.computeOptimalWindowSize(outSize);stages.push({inSize:outSize,windowSize:windowSize,outSize:Math.ceil(outSize/windowSize)})}return stages}function reduce(x,dtype,reductionType,backend){var reductionStages=getReductionStages(x.shape);var result=x;for(var i=0;i<reductionStages.length;i++){var _a=reductionStages[i],inSize=_a.inSize,windowSize=_a.windowSize,outSize=_a.outSize;var program=void 0;var previousResult=void 0;if(reductionType==="mean"){program=i===0?new MeanProgram({windowSize:windowSize,inSize:inSize,batchSize:x.shape[0],outSize:outSize},inSize):new MeanProgram({windowSize:windowSize,inSize:inSize,batchSize:x.shape[0],outSize:outSize})}else{program=new ReduceProgram({windowSize:windowSize,inSize:inSize,batchSize:x.shape[0],outSize:outSize},reductionType)}previousResult=result;result=backend.runWebGLProgram(program,[result],dtype);if(previousResult.dataId!==x.dataId){backend.disposeIntermediateTensorInfo(previousResult)}}return result}var TransposeProgram=function(){function TransposeProgram(aShape,newDim){this.variableNames=["A"];var outputShape=new Array(aShape.length);for(var i=0;i<outputShape.length;i++){outputShape[i]=aShape[newDim[i]]}this.outputShape=outputShape;this.rank=outputShape.length;var dtype=getCoordsDataType(this.rank);var switched=getSwitchedCoords(newDim);this.userCode="\n    void main() {\n      "+dtype+" resRC = getOutputCoords();\n      setOutput(getA("+switched+"));\n    }\n    "}return TransposeProgram}();function getSwitchedCoords(newDim){var rank=newDim.length;if(rank>6){throw Error("Transpose for rank "+rank+" is not yet supported")}var originalOrder=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"];var switchedCoords=new Array(rank);for(var i=0;i<newDim.length;i++){switchedCoords[newDim[i]]=originalOrder[i]}return switchedCoords.join()}var TransposePackedProgram=function(){function TransposePackedProgram(aShape,newDim){this.variableNames=["A"];this.packedInputs=true;this.packedOutput=true;var outputShape=new Array(aShape.length);for(var i=0;i<outputShape.length;i++){outputShape[i]=aShape[newDim[i]]}this.outputShape=outputShape;this.rank=outputShape.length;if(this.rank>6){throw Error("Packed transpose for rank "+this.rank+" is not yet supported.")}var dtype=getCoordsDataType(this.rank);var outputOrder=getVecChannels("rc",this.rank);var switchedOrder=new Array(this.rank);for(var i=0;i<newDim.length;i++){switchedOrder[newDim[i]]=outputOrder[i]}var innerDims="vec2("+switchedOrder.slice(-2).join()+")";var nextColumn="++"+outputOrder[this.rank-1]+" < "+outputShape[this.rank-1];var getc="getChannel(getA("+switchedOrder.join()+"), "+innerDims+")";this.userCode="\n    void main() {\n      "+dtype+" rc = getOutputCoords();\n      vec4 result = vec4(0.);\n      result[0] = "+getc+";\n      if("+nextColumn+") {\n        result[1] = "+getc+";\n      }\n      --"+outputOrder[this.rank-1]+";\n      if(++"+outputOrder[this.rank-2]+" < "+outputShape[this.rank-2]+") {\n        result[2] = "+getc+";\n        if("+nextColumn+") {\n          result[3] = "+getc+";\n        }\n      }\n      setOutput(result);\n    }\n    "}return TransposePackedProgram}();function transposeImpl(x,perm,backend){var program=tf.env().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new TransposePackedProgram(x.shape,perm):new TransposeProgram(x.shape,perm);return backend.runWebGLProgram(program,[x],x.dtype)}function sumImpl(x,axis,keepDims,backend){var reductionIndices=axis;var xRank=x.shape.length;var origAxes=tf.util.parseAxisParam(reductionIndices,x.shape);var axes=origAxes;var permutedAxes=tf.backend_util.getAxesPermutation(axes,xRank);var sumInputIsTransposed=permutedAxes!=null;var sumInput=x;if(sumInputIsTransposed){sumInput=transposeImpl(x,permutedAxes,backend);axes=tf.backend_util.getInnerMostAxes(axes.length,xRank)}tf.backend_util.assertAxesAreInnerMostDims("sum",axes,xRank);var _a=__read(tf.backend_util.computeOutAndReduceShapes(sumInput.shape,axes),2),sumOutShape=_a[0],reduceShape=_a[1];var outShape=sumOutShape;if(keepDims){outShape=tf.backend_util.expandShapeToKeepDim(sumOutShape,origAxes)}var inSize=tf.util.sizeFromShape(reduceShape);var xSize=tf.util.sizeFromShape(x.shape);var batchSize=xSize/inSize;var reshapedInput=reshape({inputs:{x:sumInput},attrs:{shape:[batchSize,inSize]},backend:backend});var outType=tf.sumOutType(x.dtype);var reduced=reduce(reshapedInput,outType,"sum",backend);var out=reshape({inputs:{x:reduced},attrs:{shape:outShape},backend:backend});backend.disposeIntermediateTensorInfo(reshapedInput);backend.disposeIntermediateTensorInfo(reduced);if(sumInputIsTransposed){backend.disposeIntermediateTensorInfo(sumInput)}return out}function sum(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var axis=attrs.axis,keepDims=attrs.keepDims;return sumImpl(x,axis,keepDims,backend)}var sumConfig={kernelName:tf.Sum,backendName:"webgl",kernelFunc:sum};function transpose(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var perm=attrs.perm;var webglBackend=backend;var xRank=x.shape.length;var newShape=new Array(xRank);for(var i=0;i<newShape.length;i++){newShape[i]=x.shape[perm[i]]}var out;if(webglBackend.shouldExecuteOnCPU([x])){var xTexData=webglBackend.texData.get(x.dataId);var values=xTexData.values;var outValues=transposeImplCPU(values,x.shape,x.dtype,perm,newShape);out=webglBackend.makeTensorInfo(newShape,x.dtype);var outData=webglBackend.texData.get(out.dataId);outData.values=outValues}else{out=transposeImpl(x,perm,webglBackend)}return out}var transposeConfig={kernelName:tf.Transpose,backendName:"webgl",kernelFunc:transpose};var MATMUL_SHARED_DIM_THRESHOLD=1e3;function batchMatMulImpl(_a){var e_1,_b;var a=_a.a,b=_a.b,transposeA=_a.transposeA,transposeB=_a.transposeB,backend=_a.backend,_c=_a.bias,bias=_c===void 0?null:_c,_d=_a.preluActivationWeights,preluActivationWeights=_d===void 0?null:_d,_e=_a.leakyreluAlpha,leakyreluAlpha=_e===void 0?0:_e,_f=_a.activation,activation=_f===void 0?null:_f;var aRank=a.shape.length;var bRank=b.shape.length;var innerShapeA=transposeA?a.shape[aRank-2]:a.shape[aRank-1];var innerShapeB=transposeB?b.shape[bRank-1]:b.shape[bRank-2];var outerShapeA=transposeA?a.shape[aRank-1]:a.shape[aRank-2];var outerShapeB=transposeB?b.shape[bRank-2]:b.shape[bRank-1];var outerDimsA=a.shape.slice(0,-2);var outerDimsB=b.shape.slice(0,-2);var batchDimA=tf.util.sizeFromShape(outerDimsA);var batchDimB=tf.util.sizeFromShape(outerDimsB);var batchDimsCompatible=batchDimA===batchDimB||batchDimA===1||batchDimB===1;tf.util.assert(aRank>=2&&bRank>=2&&batchDimsCompatible,function(){return"Error in matMul: the input batch dimensions must either be the "+"same or at least one input batch dimension must be 1. Got input "+("batch dimensions of ("+outerDimsA+") and ("+outerDimsB+").")});var outShapeOuterDims=batchDimA>batchDimB?a.shape.slice(0,-2):b.shape.slice(0,-2);var outShape=outShapeOuterDims.concat([outerShapeA,outerShapeB]);tf.util.assert(innerShapeA===innerShapeB,function(){return"Error in matMul: inner shapes ("+innerShapeA+") and ("+(innerShapeB+") of Tensors with shapes "+a.shape+" and ")+(b.shape+" and transposeA="+transposeA)+(" and transposeB="+transposeB+" must match.")});var a3dShape=transposeA?[batchDimA,innerShapeA,outerShapeA]:[batchDimA,outerShapeA,innerShapeA];var b3dShape=transposeB?[batchDimB,outerShapeB,innerShapeB]:[batchDimB,innerShapeB,outerShapeB];var a3d=reshape({inputs:{x:a},backend:backend,attrs:{shape:a3dShape}});var b3d=reshape({inputs:{x:b},backend:backend,attrs:{shape:b3dShape}});var intermediates=[a3d,b3d];var batchDim=Math.max(batchDimA,batchDimB);var sharedDim=transposeA?a3d.shape[1]:a3d.shape[2];var hasBias=bias!=null;var hasPreluActivationWeights=preluActivationWeights!=null;var hasLeakyreluAlpha=activation==="leakyrelu";var fusedActivation=activation!=null?mapActivationToShaderProgram(activation,true):null;var containsFusedOps=hasBias||hasPreluActivationWeights||hasLeakyreluAlpha||fusedActivation!=null;var out;if((outerShapeA===1||outerShapeB===1)&&sharedDim>MATMUL_SHARED_DIM_THRESHOLD&&containsFusedOps===false){var aVec=a3d;var bVec=b3d;if(transposeA){aVec=transpose({inputs:{x:a3d},backend:backend,attrs:{perm:[0,2,1]}});intermediates.push(aVec)}if(transposeB){bVec=transpose({inputs:{x:b3d},backend:backend,attrs:{perm:[0,2,1]}});intermediates.push(bVec)}var shouldReshapeA=outerShapeB!==1;var shouldReshapeB=outerShapeB===1;var aVec3d=aVec;if(shouldReshapeA){aVec3d=reshape({inputs:{x:aVec},backend:backend,attrs:{shape:[batchDim,sharedDim,1]}});intermediates.push(aVec3d)}var axis=outerShapeB===1?2:1;var bVec3d=bVec;if(shouldReshapeB){bVec3d=reshape({inputs:{x:bVec},backend:backend,attrs:{shape:[batchDim,1,sharedDim]}});intermediates.push(bVec3d)}var product=multiply({inputs:{a:aVec3d,b:bVec3d},backend:backend});out=sum({inputs:{x:product},backend:backend,attrs:{axis:axis,keepDims:true}});intermediates.push(product)}else{var dtype=tf.upcastType(a.dtype,b.dtype);var program=new MatMulPackedProgram(a3dShape,b3dShape,[batchDim,outerShapeA,outerShapeB],transposeA,transposeB,hasBias,fusedActivation,hasPreluActivationWeights,hasLeakyreluAlpha);var inputs=[a3d,b3d];if(bias!=null){inputs.push(bias)}if(hasPreluActivationWeights){inputs.push(preluActivationWeights)}if(hasLeakyreluAlpha){var $leakyreluAlpha=backend.makeTensorInfo([],"float32",tf.util.createScalarValue(leakyreluAlpha,"float32"));inputs.push($leakyreluAlpha);intermediates.push($leakyreluAlpha)}out=backend.runWebGLProgram(program,inputs,dtype)}var outReshaped=reshape({inputs:{x:out},backend:backend,attrs:{shape:outShape}});intermediates.push(out);try{for(var intermediates_1=__values(intermediates),intermediates_1_1=intermediates_1.next();!intermediates_1_1.done;intermediates_1_1=intermediates_1.next()){var i=intermediates_1_1.value;backend.disposeIntermediateTensorInfo(i)}}catch(e_1_1){e_1={error:e_1_1}}finally{try{if(intermediates_1_1&&!intermediates_1_1.done&&(_b=intermediates_1.return))_b.call(intermediates_1)}finally{if(e_1)throw e_1.error}}return outReshaped}function _fusedMatMul(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var a=inputs.a,b=inputs.b,bias=inputs.bias,preluActivationWeights=inputs.preluActivationWeights;var transposeA=attrs.transposeA,transposeB=attrs.transposeB,activation=attrs.activation,leakyreluAlpha=attrs.leakyreluAlpha;return batchMatMulImpl({a:a,b:b,transposeA:transposeA,transposeB:transposeB,backend:backend,bias:bias,preluActivationWeights:preluActivationWeights,leakyreluAlpha:leakyreluAlpha,activation:activation})}var _fusedMatMulConfig={kernelName:tf._FusedMatMul,backendName:"webgl",kernelFunc:_fusedMatMul};var ABS="return abs(x);";function abs(args){var inputs=args.inputs,backend=args.backend;var x=inputs.x;if(backend.shouldExecuteOnCPU([x])&&x.dtype!=="complex64"){var xData=backend.texData.get(x.dataId);var outValues=simpleAbsImplCPU(xData.values);return backend.makeTensorInfo(x.shape,x.dtype,outValues)}var program;if(tf.env().getBool("WEBGL_PACK_UNARY_OPERATIONS")){program=new UnaryOpPackedProgram(x.shape,ABS)}else{program=new UnaryOpProgram(x.shape,ABS)}return backend.runWebGLProgram(program,[x],x.dtype)}var absConfig={kernelName:tf.Abs,backendName:"webgl",kernelFunc:abs};var ACOS=CHECK_NAN_SNIPPET$2+"\n  if (abs(x) > 1.) {\n    return NAN;\n  }\n  return acos(x);\n";var acos=unaryKernelFunc({opSnippet:ACOS});var acosConfig={kernelName:tf.Acos,backendName:"webgl",kernelFunc:acos};var ACOSH=CHECK_NAN_SNIPPET$2+"\n  if (x < 1.0) return NAN;\nreturn log(x + sqrt(x * x - 1.0));";var acosh=unaryKernelFunc({opSnippet:ACOSH});var acoshConfig={kernelName:tf.Acosh,backendName:"webgl",kernelFunc:acosh};var ADD="return a + b;";var addKernelFunc=binaryKernelFunc({opSnippet:ADD,packedOpSnippet:ADD,supportsComplex:true,cpuKernelImpl:addImplCPU});var addConfig={kernelName:tf.Add,backendName:"webgl",kernelFunc:addKernelFunc};var AddNProgram=function(){function AddNProgram(outputShape,shapes){this.outputShape=[];this.outputShape=outputShape;this.variableNames=shapes.map(function(_,i){return"T"+i});var snippets=[];this.variableNames.forEach(function(variable){snippets.push("float v"+variable+" = get"+variable+"AtOutCoords();")});var operation=this.variableNames.map(function(variable){return"v"+variable}).join(" + ");this.userCode="\n      void main() {\n        "+snippets.join("\n        ")+"\n\n        float result = "+operation+";\n        setOutput(result);\n      }\n    "}return AddNProgram}();var AddNPackedProgram=function(){function AddNPackedProgram(outputShape,shapes){this.outputShape=[];this.packedInputs=true;this.packedOutput=true;this.outputShape=outputShape;this.variableNames=shapes.map(function(_,i){return"T"+i});var snippets=[];this.variableNames.forEach(function(variable){snippets.push("vec4 v"+variable+" = get"+variable+"AtOutCoords();")});var operation=this.variableNames.map(function(variable){return"v"+variable}).join(" + ");this.userCode="\n      void main() {\n        "+snippets.join("\n        ")+"\n\n        vec4 result = "+operation+";\n        setOutput(result);\n      }\n    "}return AddNPackedProgram}();function addN(args){var inputs=args.inputs,backend=args.backend;var tensors=inputs;if(tensors.length===1){return identity({inputs:{x:tensors[0]},backend:backend})}if(tensors.length>tf.env().get("WEBGL_MAX_TEXTURES_IN_SHADER")){var midIndex=Math.floor(tensors.length/2);var leftSide=addN({inputs:tensors.slice(0,midIndex),backend:backend});var rightSide=addN({inputs:tensors.slice(midIndex),backend:backend});return addN({inputs:[leftSide,rightSide],backend:backend})}var dtype=tensors.map(function(t){return t.dtype}).reduce(function(d1,d2){return tf.upcastType(d1,d2)});var shapes=tensors.map(function(t){return t.shape});var usePackedOp=tf.env().getBool("WEBGL_PACK");var program=usePackedOp?new AddNPackedProgram(tensors[0].shape,shapes):new AddNProgram(tensors[0].shape,shapes);return backend.runWebGLProgram(program,tensors,dtype)}var addNConfig={kernelName:tf.AddN,backendName:"webgl",kernelFunc:addN};function all(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var axis=attrs.axis,keepDims=attrs.keepDims;var xRank=x.shape.length;var origAxes=tf.util.parseAxisParam(axis,x.shape);var axes=origAxes;var permutedAxes=tf.backend_util.getAxesPermutation(axes,xRank);var permutedX=x;if(permutedAxes!=null){permutedX=transpose({inputs:{x:x},backend:backend,attrs:{perm:permutedAxes}});axes=tf.backend_util.getInnerMostAxes(axes.length,xRank)}tf.backend_util.assertAxesAreInnerMostDims("all",axes,xRank);var _a=__read(tf.backend_util.computeOutAndReduceShapes(permutedX.shape,axes),2),outShape=_a[0],reduceShape=_a[1];var inSize=tf.util.sizeFromShape(reduceShape);var a2D=reshape({inputs:{x:permutedX},backend:backend,attrs:{shape:[-1,inSize]}});var reduced=reduce(a2D,a2D.dtype,"all",backend);var res;if(keepDims){var newShape=tf.backend_util.expandShapeToKeepDim(outShape,origAxes);res=reshape({inputs:{x:reduced},backend:backend,attrs:{shape:newShape}})}else{res=reshape({inputs:{x:reduced},backend:backend,attrs:{shape:outShape}})}backend.disposeIntermediateTensorInfo(a2D);backend.disposeIntermediateTensorInfo(reduced);if(permutedAxes!=null){backend.disposeIntermediateTensorInfo(permutedX)}return res}var allConfig={kernelName:tf.All,backendName:"webgl",kernelFunc:all};function any(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var axis=attrs.axis,keepDims=attrs.keepDims;var xRank=x.shape.length;var origAxes=tf.util.parseAxisParam(axis,x.shape);var axes=origAxes;var permutedAxes=tf.backend_util.getAxesPermutation(axes,xRank);var permutedX=x;if(permutedAxes!=null){permutedX=transpose({inputs:{x:x},backend:backend,attrs:{perm:permutedAxes}});axes=tf.backend_util.getInnerMostAxes(axes.length,xRank)}tf.backend_util.assertAxesAreInnerMostDims("any",axes,xRank);var _a=__read(tf.backend_util.computeOutAndReduceShapes(permutedX.shape,axes),2),outShape=_a[0],reduceShape=_a[1];var inSize=tf.util.sizeFromShape(reduceShape);var a2D=reshape({inputs:{x:permutedX},backend:backend,attrs:{shape:[-1,inSize]}});var reduced=reduce(a2D,a2D.dtype,"any",backend);var res;if(keepDims){var newShape=tf.backend_util.expandShapeToKeepDim(outShape,origAxes);res=reshape({inputs:{x:reduced},backend:backend,attrs:{shape:newShape}})}else{res=reshape({inputs:{x:reduced},backend:backend,attrs:{shape:outShape}})}backend.disposeIntermediateTensorInfo(a2D);backend.disposeIntermediateTensorInfo(reduced);if(permutedAxes!=null){backend.disposeIntermediateTensorInfo(permutedX)}return res}var anyConfig={kernelName:tf.Any,backendName:"webgl",kernelFunc:any};var ArgMinMaxProgram=function(){function ArgMinMaxProgram(reduceInfo,op,firstPass){this.variableNames=["A"];var windowSize=reduceInfo.windowSize,batchSize=reduceInfo.batchSize,outSize=reduceInfo.outSize;if(!firstPass){this.variableNames.push("bestIndicesA")}this.outputShape=[batchSize,outSize];var compOp=op==="max"?">":"<";var indexSnippet=firstPass?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode="\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int batch = coords[0];\n        int outIdx = coords[1];\n        int inOffset = outIdx * "+windowSize+";\n\n        int bestIndex = inOffset;\n        float bestValue = getA(batch, bestIndex);\n\n        for (int i = 0; i < "+windowSize+"; i++) {\n          int inIdx = "+indexSnippet+";\n          float candidate = getA(batch, inIdx);\n          if (candidate "+compOp+" bestValue) {\n            bestValue = candidate;\n            bestIndex = inIdx;\n          }\n        }\n        setOutput(float(bestIndex));\n      }\n    "}return ArgMinMaxProgram}();var ArgMinMaxPackedProgram=function(){function ArgMinMaxPackedProgram(shape,windowSize,op,firstPass){this.variableNames=["A"];this.packedInputs=true;this.packedOutput=true;tf.util.assert(shape.length>2,function(){return"Packed arg"+(op.charAt(0).toUpperCase()+op.slice(1))+" supports only inputs with rank above 2."});var inSize=shape[shape.length-1];var outSize=Math.ceil(inSize/windowSize);this.outputShape=shape.slice(0,-1);if(outSize>1){this.outputShape.push(outSize)}if(!firstPass){this.variableNames.push("bestIndicesA")}var outShape=this.outputShape;var rank=outShape.length;var dtype=getCoordsDataType(rank);var coords=getChannels("coords",rank);var sourceLocSetup;var sourceRank;if(outSize===1){sourceRank=rank+1;var sourceLocDType=getCoordsDataType(sourceRank);sourceLocSetup="\n        "+sourceLocDType+" sourceLocR = "+sourceLocDType+"("+coords.join()+", 0);\n        ++"+coords[rank-1]+";\n        "+sourceLocDType+" sourceLocG = "+sourceLocDType+"("+coords.join()+", 0);\n        ++"+coords[rank-2]+";\n        "+sourceLocDType+" sourceLocA = "+sourceLocDType+"("+coords.join()+", 0);\n        --"+coords[rank-1]+";\n        "+sourceLocDType+" sourceLocB = "+sourceLocDType+"("+coords.join()+", 0);\n        --"+coords[rank-2]+";"}else{sourceRank=rank;sourceLocSetup="\n        "+dtype+" sourceLocR = coords;\n        ++"+coords[rank-1]+";\n        "+dtype+" sourceLocG = coords;\n        ++"+coords[rank-2]+";\n        "+dtype+" sourceLocA = coords;\n        --"+coords[rank-1]+";\n        "+dtype+" sourceLocB = coords;\n        --"+coords[rank-2]+";"}var channels=["x","y","z","w","u","v"].slice(0,sourceRank);var inChannel="."+channels[sourceRank-1];var intChannels=channels.map(function(x){return"int "+x});var srcRCoords=getChannels("sourceLocR",sourceRank-1).concat("inIdx.r");var srcGCoords=getChannels("sourceLocG",sourceRank-1).concat("inIdx.g");var srcBCoords=getChannels("sourceLocB",sourceRank-1).concat("inIdx.b");var srcACoords=getChannels("sourceLocA",sourceRank-1).concat("inIdx.a");var compOp=op==="max"?"greaterThan":"lessThan";var fetchCandidateIdx=firstPass?"":"\n          inIdx = round(vec4(getBestIndicesAChannel("+srcRCoords.join()+"),\n                             getBestIndicesAChannel("+srcGCoords.join()+"),\n                             getBestIndicesAChannel("+srcBCoords.join()+"),\n                             getBestIndicesAChannel("+srcACoords.join()+")));";var fetchValue="vec4(\n            getAChannel("+srcRCoords.join()+"),\n            hasNextCol ? getAChannel("+srcGCoords.join()+") : 0.,\n            hasNextRow ? getAChannel("+srcBCoords.join()+") : 0.,\n            hasNextRow && hasNextCol ? getAChannel("+srcACoords.join()+") : 0.)";var getBestIndicesAChannelSnippet=firstPass?"":"\n      float getBestIndicesAChannel("+intChannels.join()+") {\n        return getChannel(getBestIndicesA("+channels.join()+"),\n                                          vec2("+channels.slice(-2).join()+"));\n      }";this.userCode="\n      float getAChannel("+intChannels.join()+") {\n        return getChannel(getA("+channels.join()+"),\n                               vec2("+channels.slice(-2).join()+"));\n      }\n      "+getBestIndicesAChannelSnippet+"\n      void main() {\n        "+dtype+" coords = getOutputCoords();\n        bool hasNextCol = "+coords[rank-1]+" < "+(outShape[rank-1]-1)+";\n        bool hasNextRow = "+coords[rank-2]+" < "+(outShape[rank-2]-1)+";\n        "+sourceLocSetup+"\n        ivec4 srcIdx = ivec4(sourceLocR"+inChannel+", sourceLocG"+inChannel+",\n          sourceLocB"+inChannel+", sourceLocA"+inChannel+") * "+windowSize+";\n        ivec4 inIdx = srcIdx;\n        vec4 bestIndex = vec4(inIdx);\n        vec4 bestValue = "+fetchValue+";\n\n        for (int i = 0; i < "+windowSize+"; i++) {\n          inIdx = srcIdx;\n          "+fetchCandidateIdx+"\n          vec4 candidate = "+fetchValue+";\n          bvec4 nan = isnan(candidate);\n          bvec4 replace = bvec4(\n            vec4("+compOp+"(candidate, bestValue)) * (vec4(1.0) - vec4(nan)));\n\n          bestValue = vec4(replace.x  ? candidate.x : bestValue.x,\n                           replace.y  ? candidate.y : bestValue.y,\n                           replace.z  ? candidate.z : bestValue.z,\n                           replace.w  ? candidate.w : bestValue.w);\n          bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace));\n          srcIdx++;\n        }\n        setOutput(bestIndex);\n      }\n    "}return ArgMinMaxPackedProgram}();function argReduce(backend,x,reduceType,bestIndicesA){if(bestIndicesA===void 0){bestIndicesA=null}var batchSize=x.shape[0];var inSize=x.shape[1];if(bestIndicesA!=null){batchSize=bestIndicesA.shape[0];inSize=bestIndicesA.shape[1]}var windowSize=tf.backend_util.computeOptimalWindowSize(inSize);var reduceInfo={windowSize:windowSize,inSize:inSize,batchSize:batchSize,outSize:Math.ceil(inSize/windowSize)};var program=new ArgMinMaxProgram(reduceInfo,reduceType,bestIndicesA==null);var inputs=[x];if(bestIndicesA!=null){inputs.push(bestIndicesA)}var output=backend.runWebGLProgram(program,inputs,"int32");if(output.shape[1]===1){return output}var result=argReduce(backend,x,reduceType,output);backend.disposeIntermediateTensorInfo(output);return result}function argReducePacked(backend,x,reduceType,bestIndicesA){if(bestIndicesA===void 0){bestIndicesA=null}var inShape=bestIndicesA!=null?bestIndicesA.shape:x.shape;var inSize=inShape[inShape.length-1];var windowSize=tf.backend_util.computeOptimalWindowSize(inSize);var program=new ArgMinMaxPackedProgram(inShape,windowSize,reduceType,bestIndicesA==null);var inputs=bestIndicesA==null?[x]:[x,bestIndicesA];var output=backend.runWebGLProgram(program,inputs,"int32");if(output.shape.length===x.shape.length){var result=argReducePacked(backend,x,reduceType,output);backend.disposeIntermediateTensorInfo(output);return result}return output}function argMinMaxReduce(backend,x,axis,reduceType){var axes=[axis];tf.backend_util.assertAxesAreInnerMostDims("arg"+reduceType.charAt(0).toUpperCase()+reduceType.slice(1),axes,x.shape.length);if(!tf.env().getBool("WEBGL_PACK_REDUCE")||x.shape.length<=2){var intermediateTensorInfos=[];var xtexData=backend.texData.get(x.dataId);var xIsPacked=xtexData!==null&&xtexData.isPacked;var xUnPacked=x;if(xIsPacked){xUnPacked=backend.unpackTensor(x);intermediateTensorInfos.push(xUnPacked)}var _a=__read(tf.backend_util.computeOutAndReduceShapes(xUnPacked.shape,axes),2),outShape=_a[0],reduceShape=_a[1];var inSize=tf.util.sizeFromShape(reduceShape);var a2D=reshape({inputs:{x:xUnPacked},backend:backend,attrs:{shape:[-1,inSize]}});intermediateTensorInfos.push(a2D);var reduced=argReduce(backend,a2D,reduceType);intermediateTensorInfos.push(reduced);var reshaped=reshape({inputs:{x:reduced},backend:backend,attrs:{shape:outShape}});intermediateTensorInfos.forEach(function(t){return backend.disposeIntermediateTensorInfo(t)});return reshaped}return argReducePacked(backend,x,reduceType)}function argMax(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var axis=attrs.axis;var axes=tf.util.parseAxisParam(axis,x.shape);var permutedAxes=tf.backend_util.getAxesPermutation(axes,x.shape.length);var $x=x;var intermediateTensorInfos=[];if(permutedAxes!=null){$x=transpose({inputs:{x:x},backend:backend,attrs:{perm:permutedAxes}});intermediateTensorInfos.push($x);axes=tf.backend_util.getInnerMostAxes(axes.length,$x.shape.length)}tf.backend_util.assertAxesAreInnerMostDims("argMax",[axes[0]],$x.shape.length);var out=argMinMaxReduce(backend,$x,axes[0],"max");intermediateTensorInfos.forEach(function(t){return backend.disposeIntermediateTensorInfo(t)});return out}var argMaxConfig={kernelName:tf.ArgMax,backendName:"webgl",kernelFunc:argMax};function argMin(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var axis=attrs.axis;var axes=tf.util.parseAxisParam(axis,x.shape);var permutedAxes=tf.backend_util.getAxesPermutation(axes,x.shape.length);var $x=x;var intermediateTensorInfos=[];if(permutedAxes!=null){$x=transpose({inputs:{x:x},backend:backend,attrs:{perm:permutedAxes}});intermediateTensorInfos.push($x);axes=tf.backend_util.getInnerMostAxes(axes.length,$x.shape.length)}tf.backend_util.assertAxesAreInnerMostDims("argMin",[axes[0]],$x.shape.length);var out=argMinMaxReduce(backend,$x,axes[0],"min");intermediateTensorInfos.forEach(function(t){return backend.disposeIntermediateTensorInfo(t)});return out}var argMinConfig={kernelName:tf.ArgMin,backendName:"webgl",kernelFunc:argMin};var ASIN=CHECK_NAN_SNIPPET$2+"\n  if (abs(x) > 1.) {\n    return NAN;\n  }\n  return asin(x);\n";var asin=unaryKernelFunc({opSnippet:ASIN});var asinConfig={kernelName:tf.Asin,backendName:"webgl",kernelFunc:asin};var ASINH=CHECK_NAN_SNIPPET$2+"return log(x + sqrt(x * x + 1.0));";var asinh=unaryKernelFunc({opSnippet:ASINH});var asinhConfig={kernelName:tf.Asinh,backendName:"webgl",kernelFunc:asinh};var ATAN=CHECK_NAN_SNIPPET$2+"\n  return atan(x);\n";var atan=unaryKernelFunc({opSnippet:ATAN});var atanConfig={kernelName:tf.Atan,backendName:"webgl",kernelFunc:atan};var ATAN2=CHECK_NAN_SNIPPET_BINARY+"\n  return atan(a, b);\n";var ATAN2_PACKED="\n  vec4 result = atan(a, b);\n  vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n  "+CHECK_NAN_SNIPPET_BINARY_PACKED+"\n  return result;\n";var atan2=binaryKernelFunc({opSnippet:ATAN2,packedOpSnippet:ATAN2_PACKED});var atan2Config={kernelName:tf.Atan2,backendName:"webgl",kernelFunc:atan2};var ATANH=CHECK_NAN_SNIPPET$2+"\n  if ((x < -1.0) || (x > 1.0)) return NAN;\nreturn (log(1.0 + x) - log(1.0 - x)) / 2.0;";var atanh=unaryKernelFunc({opSnippet:ATANH});var atanhConfig={kernelName:tf.Atanh,backendName:"webgl",kernelFunc:atanh};var Pool2DProgram=function(){function Pool2DProgram(convInfo,poolType,computePositions,flattenPositions,includeBatchInIndex){if(flattenPositions===void 0){flattenPositions=false}if(includeBatchInIndex===void 0){includeBatchInIndex=false}this.variableNames=["x"];if(poolType==="avg"&&computePositions){throw new Error("Cannot compute positions for average pool.")}var filterWidth=convInfo.filterWidth;var strideHeight=convInfo.strideHeight;var strideWidth=convInfo.strideWidth;var dilationHeight=convInfo.dilationHeight;var dilationWidth=convInfo.dilationWidth;var effectiveFilterHeight=convInfo.effectiveFilterHeight;var effectiveFilterWidth=convInfo.effectiveFilterWidth;var padTop=convInfo.padInfo.top;var padLeft=convInfo.padInfo.left;this.outputShape=convInfo.outShape;var isAvgPool=poolType==="avg";var batchFlattenPositionStr="((batch  * "+convInfo.inHeight+" + xR) * "+convInfo.inWidth+" + xC) * "+convInfo.inChannels+" + d";var flattenPositionStr="(xR * "+convInfo.inWidth+" + xC) * "+convInfo.inChannels+" + d";var initializationValue="0.0";if(!isAvgPool){initializationValue="-1.0 / 1e-20"}if(computePositions){var compareOp_1=">=";this.userCode="\n        const ivec2 strides = ivec2("+strideHeight+", "+strideWidth+");\n        const ivec2 pads = ivec2("+padTop+", "+padLeft+");\n\n        void main() {\n          ivec4 coords = getOutputCoords();\n          int batch = coords[0];\n          int d = coords[3];\n\n          ivec2 xRCCorner = coords.yz * strides - pads;\n          int xRCorner = xRCCorner.x;\n          int xCCorner = xRCCorner.y;\n\n          // max/min x(?, ?, d) to get y(yR, yC, d).\n          // ? = to be determined\n          float minMaxValue = 0.0;\n          float minMaxValueFound = 0.0;\n          int minMaxPosition = 0;\n          float avgValue = 0.0;\n\n          for (int wR = 0; wR < "+effectiveFilterHeight+";\n              wR += "+dilationHeight+") {\n            int xR = xRCorner + wR;\n\n            if (xR < 0 || xR >= "+convInfo.inHeight+") {\n              continue;\n            }\n\n            for (int wC = 0; wC < "+effectiveFilterWidth+";\n                wC += "+dilationWidth+") {\n              int xC = xCCorner + wC;\n\n              if (xC < 0 || xC >= "+convInfo.inWidth+") {\n                continue;\n              }\n\n              float value = getX(batch, xR, xC, d);\n\n              // If a min / max value has already been found, use it. If not,\n              // use the current value.\n              float currMinMaxValue = mix(\n                  value, minMaxValue, minMaxValueFound);\n              if (value "+compareOp_1+" currMinMaxValue) {\n                minMaxValue = value;\n                minMaxValueFound = 1.0;\n                minMaxPosition = "+(flattenPositions?includeBatchInIndex?batchFlattenPositionStr:flattenPositionStr:"wR * "+effectiveFilterWidth+" + wC")+";\n              }\n            }\n          }\n          setOutput(float(minMaxPosition));\n        }\n      ";return}var compareOp="max";var returnValue=poolType+"("+poolType+"("+poolType+"("+"minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";if(poolType==="avg"){returnValue="avgValue / count"}var filterWidthNearestVec4=Math.floor(filterWidth/4)*4;var filterWidthVec4Remainder=filterWidth%4;var updateSnippet="\n      if ("+isAvgPool+") {\n        avgValue += dot(values, ones);\n      } else {\n        minMaxValue = "+compareOp+"(values, minMaxValue);\n      }\n    ";this.userCode="\n      const ivec2 strides = ivec2("+strideHeight+", "+strideWidth+");\n      const ivec2 pads = ivec2("+padTop+", "+padLeft+");\n      const float initializationValue = "+initializationValue+";\n      const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n      float count = 0.0;\n\n      float getValue(int batch, int xR, int xC, int d) {\n        if (xC < 0 || xC >= "+convInfo.inWidth+") {\n          return initializationValue;\n        }\n        count += 1.0;\n        return getX(batch, xR, xC, d);\n      }\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords[0];\n        int d = coords[3];\n\n        ivec2 xRCCorner = coords.yz * strides - pads;\n        int xRCorner = xRCCorner.x;\n        int xCCorner = xRCCorner.y;\n\n        // max/min x(?, ?, d) to get y(yR, yC, d).\n        // ? = to be determined\n        vec4 minMaxValue = vec4("+initializationValue+");\n        float avgValue = 0.0;\n        count = 0.0;\n\n        for (int wR = 0; wR < "+effectiveFilterHeight+";\n            wR += "+dilationHeight+") {\n          int xR = xRCorner + wR;\n\n          if (xR < 0 || xR >= "+convInfo.inHeight+") {\n            continue;\n          }\n\n          for (int wC = 0; wC < "+filterWidthNearestVec4+"; wC += 4) {\n            int xC = xCCorner + wC * "+dilationWidth+";\n\n            vec4 values = vec4(\n              getValue(batch, xR, xC, d),\n              getValue(batch, xR, xC + "+dilationWidth+", d),\n              getValue(batch, xR, xC + 2 * "+dilationWidth+", d),\n              getValue(batch, xR, xC + 3 * "+dilationWidth+", d)\n            );\n\n            "+updateSnippet+"\n          }\n\n          int xC = xCCorner + "+filterWidthNearestVec4+";\n          if ("+(filterWidthVec4Remainder===1)+") {\n            vec4 values = vec4(\n              getValue(batch, xR, xC, d),\n              initializationValue,\n              initializationValue,\n              initializationValue\n            );\n\n            "+updateSnippet+"\n          } else if ("+(filterWidthVec4Remainder===2)+") {\n            vec4 values = vec4(\n              getValue(batch, xR, xC, d),\n              getValue(batch, xR, xC + "+dilationWidth+", d),\n              initializationValue,\n              initializationValue\n            );\n\n            "+updateSnippet+"\n          } else if ("+(filterWidthVec4Remainder===3)+") {\n            vec4 values = vec4(\n              getValue(batch, xR, xC, d),\n              getValue(batch, xR, xC + "+dilationWidth+", d),\n              getValue(batch, xR, xC + 2 * "+dilationWidth+", d),\n              initializationValue\n            );\n\n            "+updateSnippet+"\n          }\n        }\n        setOutput("+returnValue+");\n      }\n    "}return Pool2DProgram}();var Pool3DProgram=function(){function Pool3DProgram(convInfo,poolType,computePositions,flattenPositions,includeBatchInIndex){if(flattenPositions===void 0){flattenPositions=false}if(includeBatchInIndex===void 0){includeBatchInIndex=false}this.variableNames=["x"];if(poolType==="avg"&&computePositions){throw new Error("Cannot compute positions for average pool.")}var filterWidth=convInfo.filterWidth;var strideDepth=convInfo.strideDepth;var strideHeight=convInfo.strideHeight;var strideWidth=convInfo.strideWidth;var dilationDepth=convInfo.dilationDepth;var dilationHeight=convInfo.dilationHeight;var dilationWidth=convInfo.dilationWidth;var effectiveFilterDepth=convInfo.effectiveFilterDepth;var effectiveFilterHeight=convInfo.effectiveFilterHeight;var effectiveFilterWidth=convInfo.effectiveFilterWidth;var padFront=convInfo.padInfo.front;var padTop=convInfo.padInfo.top;var padLeft=convInfo.padInfo.left;this.outputShape=convInfo.outShape;var isAvgPool=poolType==="avg";var initializationValue="0.0";if(!isAvgPool){initializationValue="-1.0 / 1e-20"}if(computePositions){var compareOp_2=">=";this.userCode="\n        const ivec3 strides =\n            ivec3("+strideDepth+", "+strideHeight+", "+strideWidth+");\n        const ivec3 pads = ivec3("+padFront+", "+padTop+", "+padLeft+");\n\n        void main() {\n          ivec5 coords = getOutputCoords();\n          int batch = coords.x;\n          int ch = coords.u;\n\n          ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n          int xDCorner = xCorner.x;\n          int xRCorner = xCorner.y;\n          int xCCorner = xCorner.z;\n\n          // max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch).\n          // ? = to be determined\n          float minMaxValue = 0.0;\n          float minMaxValueFound = 0.0;\n          int minMaxPosition = 0;\n\n          for (int wD = 0; wD < "+effectiveFilterDepth+";\n              wD += "+dilationDepth+") {\n            int xD = xDCorner + wD;\n\n            if (xD < 0 || xD >= "+convInfo.inDepth+") {\n              continue;\n            }\n\n            for (int wR = 0; wR < "+effectiveFilterHeight+";\n                wR += "+dilationHeight+") {\n              int xR = xRCorner + wR;\n\n              if (xR < 0 || xR >= "+convInfo.inHeight+") {\n                continue;\n              }\n\n              for (int wC = 0; wC < "+effectiveFilterWidth+";\n                  wC += "+dilationWidth+") {\n                int xC = xCCorner + wC;\n\n                if (xC < 0 || xC >= "+convInfo.inWidth+") {\n                  continue;\n                }\n\n                float value = getX(batch, xD, xR, xC, ch);\n\n                // If a min / max value has already been found, use it. If not,\n                // use the current value.\n                float currMinMaxValue = mix(\n                    value, minMaxValue, minMaxValueFound);\n                if (value "+compareOp_2+" currMinMaxValue) {\n                  minMaxValue = value;\n                  minMaxValueFound = 1.0;\n                  minMaxPosition = "+(flattenPositions?includeBatchInIndex?"(((batch * "+convInfo.inDepth+" + xD) * "+convInfo.inHeight+" + xR) * "+convInfo.inWidth+" + xC) * "+convInfo.inChannels+" + ch":"((xD * "+convInfo.inHeight+" + xR) * "+convInfo.inWidth+" + xC) * "+convInfo.inChannels+" + ch":"wD * "+effectiveFilterHeight+" * "+effectiveFilterWidth+" +\n                      wR * "+effectiveFilterWidth+" + wC")+";\n                }\n              }\n            }\n          }\n          setOutput(float(minMaxPosition));\n        }\n      ";return}var compareOp="max";var returnValue=poolType+"("+poolType+"("+poolType+"("+"minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";if(poolType==="avg"){returnValue="avgValue / count"}var filterWidthNearestVec4=Math.floor(filterWidth/4)*4;var filterWidthVec4Remainder=filterWidth%4;var updateSnippet="\n      if ("+isAvgPool+") {\n        avgValue += dot(values, ones);\n      } else {\n        minMaxValue = "+compareOp+"(values, minMaxValue);\n      }\n    ";this.userCode="\n      const ivec3 strides =\n        ivec3("+strideDepth+", "+strideHeight+", "+strideWidth+");\n      const ivec3 pads = ivec3("+padFront+", "+padTop+", "+padLeft+");\n      const float initializationValue = "+initializationValue+";\n      const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n      float count = 0.0;\n\n      float getValue(int batch, int xD, int xR, int xC, int ch) {\n        if (xC < 0 || xC >= "+convInfo.inWidth+") {\n          return initializationValue;\n        }\n        count += 1.0;\n        return getX(batch, xD, xR, xC, ch);\n      }\n\n      void main() {\n        ivec5 coords = getOutputCoords();\n        int batch = coords.x;\n        int ch = coords.u;\n\n        ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n        int xDCorner = xCorner.x;\n        int xRCorner = xCorner.y;\n        int xCCorner = xCorner.z;\n\n        // max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch).\n        // ? = to be determined\n        vec4 minMaxValue = vec4("+initializationValue+");\n        float avgValue = 0.0;\n        count = 0.0;\n\n        for (int wD = 0; wD < "+effectiveFilterDepth+";\n            wD += "+dilationDepth+") {\n          int xD = xDCorner + wD;\n\n          if (xD < 0 || xD >= "+convInfo.inDepth+") {\n            continue;\n          }\n\n          for (int wR = 0; wR < "+effectiveFilterHeight+";\n            wR += "+dilationHeight+") {\n            int xR = xRCorner + wR;\n\n            if (xR < 0 || xR >= "+convInfo.inHeight+") {\n              continue;\n            }\n\n            for (int wC = 0; wC < "+filterWidthNearestVec4+"; wC += 4) {\n              int xC = xCCorner + wC * "+dilationWidth+";\n\n              vec4 values = vec4(\n                getValue(batch, xD, xR, xC, ch),\n                getValue(batch, xD, xR, xC + "+dilationWidth+", ch),\n                getValue(batch, xD, xR, xC + 2 * "+dilationWidth+", ch),\n                getValue(batch, xD, xR, xC + 3 * "+dilationWidth+", ch)\n              );\n\n              "+updateSnippet+"\n            }\n\n            int xC = xCCorner + "+filterWidthNearestVec4+";\n            if ("+(filterWidthVec4Remainder===1)+") {\n              vec4 values = vec4(\n                getValue(batch, xD, xR, xC, ch),\n                initializationValue,\n                initializationValue,\n                initializationValue\n              );\n\n              "+updateSnippet+"\n            } else if ("+(filterWidthVec4Remainder===2)+") {\n              vec4 values = vec4(\n                getValue(batch, xD, xR, xC, ch),\n                getValue(batch, xD, xR, xC + "+dilationWidth+", ch),\n                initializationValue,\n                initializationValue\n              );\n\n              "+updateSnippet+"\n            } else if ("+(filterWidthVec4Remainder===3)+") {\n              vec4 values = vec4(\n                getValue(batch, xD, xR, xC, ch),\n                getValue(batch, xD, xR, xC + "+dilationWidth+", ch),\n                getValue(batch, xD, xR, xC + 2 * "+dilationWidth+", ch),\n                initializationValue\n              );\n\n              "+updateSnippet+"\n            }\n          }\n          setOutput("+returnValue+");\n        }\n      }\n    "}return Pool3DProgram}();function avgPool(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;assertNotComplex(x,"avgPool");var filterSize=attrs.filterSize,strides=attrs.strides,pad=attrs.pad,dimRoundingMode=attrs.dimRoundingMode;var dilations=1;tf.util.assert(tf.backend_util.eitherStridesOrDilationsAreOne(strides,dilations),function(){return"Error in avgPool: Either strides or dilations must be 1. "+("Got strides "+strides+" and dilations '"+dilations+"'")});var convInfo=tf.backend_util.computePool2DInfo(x.shape,filterSize,strides,dilations,pad,dimRoundingMode);if(convInfo.filterWidth===1&&convInfo.filterHeight===1&&tf.util.arraysEqual(convInfo.inShape,convInfo.outShape)){return identity({inputs:{x:x},backend:backend})}var avgPoolProgram=new Pool2DProgram(convInfo,"avg",false);return backend.runWebGLProgram(avgPoolProgram,[x],"float32")}var avgPoolConfig={kernelName:tf.AvgPool,backendName:"webgl",kernelFunc:avgPool};function avgPool3D(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var filterSize=attrs.filterSize,strides=attrs.strides,pad=attrs.pad,dimRoundingMode=attrs.dimRoundingMode,dataFormat=attrs.dataFormat;var dilations=[1,1,1];var convInfo=tf.backend_util.computePool3DInfo(x.shape,filterSize,strides,dilations,pad,dimRoundingMode,dataFormat);var avgPoolProgram=new Pool3DProgram(convInfo,"avg",false);return backend.runWebGLProgram(avgPoolProgram,[x],"float32")}var avgPool3DConfig={kernelName:tf.AvgPool3D,backendName:"webgl",kernelFunc:avgPool3D};var AvgPool2DBackpropProgram=function(){function AvgPool2DBackpropProgram(convInfo){this.variableNames=["dy"];this.outputShape=convInfo.inShape;var filterHeight=convInfo.filterHeight;var filterWidth=convInfo.filterWidth;var strideHeight=convInfo.strideHeight;var strideWidth=convInfo.strideWidth;var dilationHeight=convInfo.dilationHeight;var dilationWidth=convInfo.dilationWidth;var effectiveFilterHeight=convInfo.effectiveFilterHeight;var effectiveFilterWidth=convInfo.effectiveFilterWidth;var padTop=effectiveFilterHeight-1-convInfo.padInfo.top;var padLeft=effectiveFilterWidth-1-convInfo.padInfo.left;var avgMultiplier=1/(filterHeight*filterWidth);this.userCode="\n      const ivec2 pads = ivec2("+padTop+", "+padLeft+");\n      const float avgMultiplier = float("+avgMultiplier+");\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n\n        ivec2 dyRCCorner = coords.yz - pads;\n        int dyRCorner = dyRCCorner.x;\n        int dyCCorner = dyRCCorner.y;\n\n        // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n        for (int wR = 0; wR < "+effectiveFilterHeight+";\n            wR += "+dilationHeight+") {\n          float dyR = float(dyRCorner + wR) / "+strideHeight+".0;\n\n          if (dyR < 0.0 || dyR >= "+convInfo.outHeight+".0 || fract(dyR) > 0.0) {\n            continue;\n          }\n          int idyR = int(dyR);\n\n          for (int wC = 0; wC < "+effectiveFilterWidth+";\n            wC+= "+dilationWidth+") {\n            float dyC = float(dyCCorner + wC) / "+strideWidth+".0;\n\n            if (dyC < 0.0 || dyC >= "+convInfo.outWidth+".0 ||\n                fract(dyC) > 0.0) {\n              continue;\n            }\n            int idyC = int(dyC);\n\n            float dyValue = getDy(b, idyR, idyC, d);\n\n            dotProd += dyValue * avgMultiplier;\n          }\n        }\n        setOutput(dotProd);\n      }\n    "}return AvgPool2DBackpropProgram}();var AvgPool3DBackpropProgram=function(){function AvgPool3DBackpropProgram(convInfo){this.variableNames=["dy"];this.outputShape=convInfo.inShape;var filterDepth=convInfo.filterDepth;var filterHeight=convInfo.filterHeight;var filterWidth=convInfo.filterWidth;var strideDepth=convInfo.strideDepth;var strideHeight=convInfo.strideHeight;var strideWidth=convInfo.strideWidth;var dilationDepth=convInfo.dilationDepth;var dilationHeight=convInfo.dilationHeight;var dilationWidth=convInfo.dilationWidth;var effectiveFilterDepth=convInfo.effectiveFilterDepth;var effectiveFilterHeight=convInfo.effectiveFilterHeight;var effectiveFilterWidth=convInfo.effectiveFilterWidth;var padFront=effectiveFilterDepth-1-convInfo.padInfo.front;var padTop=effectiveFilterHeight-1-convInfo.padInfo.top;var padLeft=effectiveFilterWidth-1-convInfo.padInfo.left;var avgMultiplier=1/(filterDepth*filterHeight*filterWidth);this.userCode="\n      const ivec3 pads = ivec3("+padFront+", "+padTop+", "+padLeft+");\n      const float avgMultiplier = float("+avgMultiplier+");\n\n      void main() {\n        ivec5 coords = getOutputCoords();\n        int batch = coords.x;\n        int ch = coords.u;\n\n        ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n        int dyDCorner = dyCorner.x;\n        int dyRCorner = dyCorner.y;\n        int dyCCorner = dyCorner.z;\n\n        // Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get\n        // dx(xD, xR, xC, ch).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n\n        for (int wD = 0; wD < "+effectiveFilterDepth+";\n            wD += "+dilationDepth+") {\n          float dyD = float(dyDCorner + wD) / "+strideDepth+".0;\n\n          if (dyD < 0.0 || dyD >= "+convInfo.outDepth+".0 || fract(dyD) > 0.0) {\n            continue;\n          }\n          int idyD = int(dyD);\n\n          for (int wR = 0; wR < "+effectiveFilterHeight+";\n              wR += "+dilationHeight+") {\n            float dyR = float(dyRCorner + wR) / "+strideHeight+".0;\n\n            if (dyR < 0.0 || dyR >= "+convInfo.outHeight+".0 ||\n                fract(dyR) > 0.0) {\n              continue;\n            }\n            int idyR = int(dyR);\n\n            for (int wC = 0; wC < "+effectiveFilterWidth+";\n                wC += "+dilationWidth+") {\n              float dyC = float(dyCCorner + wC) / "+strideWidth+".0;\n\n              if (dyC < 0.0 || dyC >= "+convInfo.outWidth+".0 ||\n                  fract(dyC) > 0.0) {\n                continue;\n              }\n              int idyC = int(dyC);\n\n              float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n\n              dotProd += dyValue * avgMultiplier;\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    "}return AvgPool3DBackpropProgram}();function avgPool3DGrad(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var dy=inputs.dy,input=inputs.input;var x=input;var filterSize=attrs.filterSize,strides=attrs.strides,pad=attrs.pad,dimRoundingMode=attrs.dimRoundingMode;var dilations=[1,1,1];var convInfo=tf.backend_util.computePool3DInfo(x.shape,filterSize,strides,dilations,pad,dimRoundingMode);var avgPoolBackpropProgram=new AvgPool3DBackpropProgram(convInfo);return backend.runWebGLProgram(avgPoolBackpropProgram,[dy],x.dtype)}var avgPoolGrad3DConfig={kernelName:tf.AvgPool3DGrad,backendName:"webgl",kernelFunc:avgPool3DGrad};function avgPoolGrad(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var dy=inputs.dy,input=inputs.input;var x=input;assertNotComplex([dy,input],"avgPoolGrad");var filterSize=attrs.filterSize,strides=attrs.strides,pad=attrs.pad;var convInfo=tf.backend_util.computePool2DInfo(x.shape,filterSize,strides,1,pad);var avgPoolBackpropProgram=new AvgPool2DBackpropProgram(convInfo);return backend.runWebGLProgram(avgPoolBackpropProgram,[dy],x.dtype)}var avgPoolGradConfig={kernelName:tf.AvgPoolGrad,backendName:"webgl",kernelFunc:avgPoolGrad};function batchMatMul(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var a=inputs.a,b=inputs.b;var transposeA=attrs.transposeA,transposeB=attrs.transposeB;return batchMatMulImpl({a:a,b:b,transposeA:transposeA,transposeB:transposeB,backend:backend})}var batchMatMulConfig={kernelName:tf.BatchMatMul,backendName:"webgl",kernelFunc:batchMatMul};var BatchNormProgram=function(){function BatchNormProgram(xShape,meanShape,varianceShape,offsetShape,scaleShape,varianceEpsilon){this.outputShape=[];this.variableNames=["x","mean","variance"];tf.backend_util.assertAndGetBroadcastShape(xShape,meanShape);tf.backend_util.assertAndGetBroadcastShape(xShape,varianceShape);var offsetSnippet="0.0";if(offsetShape!=null){tf.backend_util.assertAndGetBroadcastShape(xShape,offsetShape);this.variableNames.push("offset");offsetSnippet="getOffsetAtOutCoords()"}var scaleSnippet="1.0";if(scaleShape!=null){tf.backend_util.assertAndGetBroadcastShape(xShape,scaleShape);this.variableNames.push("scale");scaleSnippet="getScaleAtOutCoords()"}this.outputShape=xShape;this.userCode="\n      void main() {\n        float x = getXAtOutCoords();\n        float mean = getMeanAtOutCoords();\n        float variance = getVarianceAtOutCoords();\n        float offset = "+offsetSnippet+";\n        float scale = "+scaleSnippet+";\n        float inv = scale * inversesqrt(variance + float("+varianceEpsilon+"));\n        setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));\n      }\n    "}return BatchNormProgram}();var BatchNormPackedProgram=function(){function BatchNormPackedProgram(xShape,meanShape,varianceShape,offsetShape,scaleShape,varianceEpsilon){this.packedInputs=true;this.packedOutput=true;this.variableNames=["x","mean","variance"];tf.backend_util.assertAndGetBroadcastShape(xShape,meanShape);tf.backend_util.assertAndGetBroadcastShape(xShape,varianceShape);var offsetSnippet="vec4(0.0)";if(offsetShape!=null){tf.backend_util.assertAndGetBroadcastShape(xShape,offsetShape);this.variableNames.push("offset");offsetSnippet="getOffsetAtOutCoords()"}var scaleSnippet="vec4(1.0)";if(scaleShape!=null){tf.backend_util.assertAndGetBroadcastShape(xShape,scaleShape);this.variableNames.push("scale");scaleSnippet="getScaleAtOutCoords()"}this.outputShape=xShape;this.userCode="\n      void main() {\n        vec4 offset = "+offsetSnippet+";\n        vec4 scale = "+scaleSnippet+";\n\n        vec4 x = getXAtOutCoords();\n        vec4 mean = getMeanAtOutCoords();\n        vec4 variance = getVarianceAtOutCoords();\n\n        vec4 inv = scale * inversesqrt(variance + vec4("+varianceEpsilon+"));\n\n        setOutput((x - mean) * inv + offset);\n      }\n    "}return BatchNormPackedProgram}();var batchNorm=function(_a){var inputs=_a.inputs,backend=_a.backend,attrs=_a.attrs;var x=inputs.x,mean=inputs.mean,variance=inputs.variance,offset=inputs.offset,scale=inputs.scale;tf.util.assert(mean.shape.length===variance.shape.length,function(){return"Batch normalization gradient requires mean and variance to have "+"equal ranks."});tf.util.assert(offset==null||mean.shape.length===offset.shape.length,function(){return"Batch normalization gradient requires mean and offset to have "+"equal ranks."});tf.util.assert(scale==null||mean.shape.length===scale.shape.length,function(){return"Batch normalization gradient requires mean and scale to have "+"equal ranks."});var varianceEpsilon=attrs.varianceEpsilon;if(varianceEpsilon==null){varianceEpsilon=.001}var finalInputs=[x,mean,variance];var offsetShape=null;if(offset!=null){offsetShape=offset.shape;finalInputs.push(offset)}var scaleShape=null;if(scale!=null){scaleShape=scale.shape;finalInputs.push(scale)}var program=tf.env().getBool("WEBGL_PACK_NORMALIZATION")?new BatchNormPackedProgram(x.shape,mean.shape,variance.shape,offsetShape,scaleShape,varianceEpsilon):new BatchNormProgram(x.shape,mean.shape,variance.shape,offsetShape,scaleShape,varianceEpsilon);var output=backend.runWebGLProgram(program,finalInputs,finalInputs[0].dtype);return output};var batchNormConfig={kernelName:tf.FusedBatchNorm,backendName:"webgl",kernelFunc:batchNorm};var SliceProgram=function(){function SliceProgram(destSize){this.variableNames=["source"];this.outputShape=destSize;this.rank=destSize.length;var dtype=getCoordsDataType(this.rank);this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];var sourceCoords=getCoords$1(this.rank);var body;var coordSum=destSize.map(function(_,i){return"sourceLoc."+coords[i]+" = start["+i+"] + coords."+coords[i]+";"});body="\n        "+dtype+" sourceLoc;\n        "+dtype+" coords = getOutputCoords();\n        "+coordSum.join("\n")+"\n      ";this.userCode="\n      void main() {\n        "+body+"\n        setOutput(getSource("+sourceCoords+"));\n      }\n    "}return SliceProgram}();var coords=["x","y","z","w","u","v"];function getCoords$1(rank){if(rank===1){return"sourceLoc"}else if(rank<=6){return coords.slice(0,rank).map(function(x){return"sourceLoc."+x}).join(",")}else{throw Error("Slicing for rank "+rank+" is not yet supported")}}var SlicePackedProgram=function(){function SlicePackedProgram(destSize){this.variableNames=["source"];this.packedInputs=true;this.packedOutput=true;this.outputShape=destSize;this.rank=destSize.length;this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];var dtype=getCoordsDataType(this.rank);var coords=getChannels("coords",this.rank);var sourceLoc=getChannels("sourceLoc",this.rank);var innerDims=this.rank===1?"sourceLoc":"vec2("+sourceLoc.slice(-2).join()+")";var getChannel="getChannel(getSource("+sourceLoc.join()+"), "+innerDims+")";var upperRow="\n      result.x = "+getChannel+";\n      if (++"+coords[this.rank-1]+" < "+destSize[this.rank-1]+") {\n        ++"+sourceLoc[this.rank-1]+";\n        result.y = "+getChannel+";\n        --"+sourceLoc[this.rank-1]+";\n      }\n    ";var lowerRow=this.rank===1?"":"\n      --"+coords[this.rank-1]+";\n      if (++"+coords[this.rank-2]+" < "+destSize[this.rank-2]+") {\n        ++"+sourceLoc[this.rank-2]+";\n        result.z = "+getChannel+";\n        if (++"+coords[this.rank-1]+" < "+destSize[this.rank-1]+") {\n          ++"+sourceLoc[this.rank-1]+";\n          result.w = "+getChannel+";\n        }\n      }\n    ";var sourceLocSetup=this.rank<=4?"sourceLoc = coords +\n            "+dtype+"("+destSize.map(function(_,i){return"start["+i+"]"}).join()+");":destSize.map(function(_,i){return sourceLoc[i]+" = "+coords[i]+" + start["+i+"];"}).join("\n");this.userCode="\n      void main() {\n        "+dtype+" coords = getOutputCoords();\n        "+dtype+" sourceLoc;\n        "+sourceLocSetup+"\n        vec4 result = vec4(0.);\n        "+upperRow+"\n        "+lowerRow+"\n        setOutput(result);\n      }\n    "}return SlicePackedProgram}();function shallowSlice(x,begin,size,backend){var xTexData=backend.texData.get(x.dataId);var t=backend.makeTensorInfo(size,x.dtype);var newTexData=backend.texData.get(t.dataId);Object.assign(newTexData,xTexData);newTexData.refCount=1;newTexData.shape=size;newTexData.dtype=x.dtype;var flatOffset=tf.slice_util.computeFlatOffset(begin,tf.util.computeStrides(x.shape));if(xTexData.slice){flatOffset+=xTexData.slice.flatOffset}newTexData.slice={flatOffset:flatOffset,origDataId:xTexData.slice&&xTexData.slice.origDataId||x.dataId};var refCount=backend.dataRefCount.get(newTexData.slice.origDataId)||1;backend.dataRefCount.set(newTexData.slice.origDataId,refCount+1);return t}function slice(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var begin=attrs.begin,size=attrs.size;var _a=__read(tf.slice_util.parseSliceParams(x,begin,size),2),$begin=_a[0],$size=_a[1];tf.slice_util.assertParamsValid(x,$begin,$size);if(tf.util.sizeFromShape($size)===0){return backend.makeTensorInfo($size,x.dtype,[])}if(backend.shouldExecuteOnCPU([x])||x.dtype==="string"){var xTexData=backend.texData.get(x.dataId);var outValues=sliceImplCPU(xTexData.values,$begin,$size,x.shape,x.dtype);return backend.makeTensorInfo($size,x.dtype,outValues)}var isPacked=backend.texData.get(x.dataId).isPacked;var isContinous=tf.slice_util.isSliceContinous(x.shape,$begin,$size);if(isPacked||!isContinous){var program=tf.env().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new SlicePackedProgram($size):new SliceProgram($size);var customValues=[$begin];return backend.runWebGLProgram(program,[x],x.dtype,customValues)}backend.uploadToGPU(x.dataId);return shallowSlice(x,$begin,$size,backend)}var sliceConfig={kernelName:tf.Slice,backendName:"webgl",kernelFunc:slice};var batchToSpaceND=function(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var blockShape=attrs.blockShape,crops=attrs.crops;tf.util.assert(x.shape.length<=4,function(){return"batchToSpaceND for rank > 4 with a WebGL backend not "+"implemented yet"});var prod=blockShape.reduce(function(a,b){return a*b});var reshaped=tf.backend_util.getReshaped(x.shape,blockShape,prod);var permuted=tf.backend_util.getPermuted(reshaped.length,blockShape.length);var reshapedPermuted=tf.backend_util.getReshapedPermuted(x.shape,blockShape,prod);var sliceBeginCoords=tf.backend_util.getSliceBeginCoords(crops,blockShape.length);var sliceSize=tf.backend_util.getSliceSize(reshapedPermuted,crops,blockShape.length);var toDispose=[];var reshapedIntermediate=reshape({inputs:{x:x},backend:backend,attrs:{shape:reshaped}});var transposedIntermediate=transpose({inputs:{x:reshapedIntermediate},backend:backend,attrs:{perm:permuted}});var reshapedIntermediate2=reshape({inputs:{x:transposedIntermediate},backend:backend,attrs:{shape:reshapedPermuted}});var sliced=slice({inputs:{x:reshapedIntermediate2},backend:backend,attrs:{begin:sliceBeginCoords,size:sliceSize}});toDispose.push(reshapedIntermediate);toDispose.push(transposedIntermediate);toDispose.push(reshapedIntermediate2);toDispose.forEach(function(t){return backend.disposeIntermediateTensorInfo(t)});return sliced};var batchToSpaceNDConfig={kernelName:tf.BatchToSpaceND,backendName:"webgl",kernelFunc:batchToSpaceND};function bincount(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,weights=inputs.weights;var size=attrs.size;var xVals=backend.readSync(x.dataId);var weightsVals=backend.readSync(weights.dataId);var outVals=bincountImplCPU(xVals,weightsVals,weights.dtype,weights.shape,size);return backend.makeTensorInfo([size],weights.dtype,outVals)}var bincountConfig={kernelName:tf.Bincount,backendName:"webgl",kernelFunc:bincount};function broadcastArgs(args){var inputs=args.inputs,backend=args.backend;var s0=inputs.s0,s1=inputs.s1;var s0Vals=backend.readSync(s0.dataId);var s1Vals=backend.readSync(s1.dataId);var broadcastShape=tf.backend_util.assertAndGetBroadcastShape(Array.from(s0Vals),Array.from(s1Vals));return backend.makeTensorInfo([broadcastShape.length],"int32",Int32Array.from(broadcastShape))}var broadcastArgsConfig={kernelName:tf.BroadcastArgs,backendName:"webgl",kernelFunc:broadcastArgs};var NOT_EQUAL="return float(a != b);";var notEqual=binaryKernelFunc({opSnippet:NOT_EQUAL,cpuKernelImpl:notEqualImplCPU,dtype:"bool"});var notEqualConfig={kernelName:tf.NotEqual,backendName:"webgl",kernelFunc:notEqual};function real(args){var inputs=args.inputs,backend=args.backend;var input=inputs.input;var inputData=backend.texData.get(input.dataId);return identity({inputs:{x:inputData.complexTensorInfos.real},backend:backend})}var realConfig={kernelName:tf.Real,backendName:"webgl",kernelFunc:real};var TO_INT="return float(int(x));";function int(input,backend){var program=new UnaryOpProgram(input.shape,TO_INT);var output=backend.runWebGLProgram(program,[input],"int32");return{dataId:output.dataId,shape:output.shape,dtype:output.dtype}}function cast(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var dtype=attrs.dtype;if(dtype==="complex64"){if(x.dtype==="complex64"){return identity({inputs:{x:x},backend:backend})}var zerosTensor=tf__namespace.zeros(x.shape);var floatX=cast({inputs:{x:x},backend:backend,attrs:{dtype:"float32"}});var result=complex({inputs:{real:floatX,imag:zerosTensor},backend:backend});zerosTensor.dispose();backend.disposeIntermediateTensorInfo(floatX);return result}if(x.dtype==="complex64"){var realPart=real({inputs:{input:x},backend:backend});var result=cast({inputs:{x:realPart},backend:backend,attrs:{dtype:dtype}});backend.disposeIntermediateTensorInfo(realPart);return result}if(!tf.util.hasEncodingLoss(x.dtype,dtype)){var result=identity({inputs:{x:x},backend:backend});return{dataId:result.dataId,shape:result.shape,dtype:dtype}}if(dtype==="int32"){return int(x,backend)}if(dtype==="bool"){var zerosTensorInfo=backend.makeTensorInfo([],"bool",tf.util.getTypedArrayFromDType("bool",1));var binaryInputs={a:x,b:zerosTensorInfo};var result=notEqual({inputs:binaryInputs,backend:backend});backend.disposeIntermediateTensorInfo(zerosTensorInfo);return result}throw new Error("Error in Cast: failed to cast "+x.dtype+" to "+dtype)}var castConfig={kernelName:tf.Cast,backendName:"webgl",kernelFunc:cast};var CEIL="return ceil(x);";var ceil=unaryKernelFunc({opSnippet:CEIL,packedOpSnippet:CEIL,cpuKernelImpl:ceilImplCPU});var ceilConfig={kernelName:tf.Ceil,backendName:"webgl",kernelFunc:ceil};var ClipProgram=function(){function ClipProgram(aShape){this.variableNames=["A"];this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}];this.outputShape=aShape;this.userCode="\n\n      void main() {\n        float value = getAAtOutCoords();\n        if (isnan(value)) {\n          setOutput(value);\n          return;\n        }\n\n        setOutput(clamp(value, minVal, maxVal));\n      }\n    "}return ClipProgram}();var ClipPackedProgram=function(){function ClipPackedProgram(aShape){this.variableNames=["A"];this.packedInputs=true;this.packedOutput=true;this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}];this.outputShape=aShape;this.userCode="\n      void main() {\n        vec4 value = getAAtOutCoords();\n\n        if (any(isnan(value))) {\n          setOutput(value);\n          return;\n        }\n\n        setOutput(clamp(value, vec4(minVal), vec4(maxVal)));\n      }\n    "}return ClipPackedProgram}();function clipByValue(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var clipValueMin=attrs.clipValueMin,clipValueMax=attrs.clipValueMax;var program;if(tf.env().getBool("WEBGL_PACK_CLIP")){program=new ClipPackedProgram(x.shape)}else{program=new ClipProgram(x.shape)}var customValues=[[clipValueMin],[clipValueMax]];return backend.runWebGLProgram(program,[x],x.dtype,customValues)}var clipByValueConfig={kernelName:tf.ClipByValue,backendName:"webgl",kernelFunc:clipByValue};var ComplexAbsProgram=function(){function ComplexAbsProgram(shape){this.variableNames=["real","imag"];this.outputShape=shape;this.userCode="\n      void main() {\n        float re = abs(getRealAtOutCoords());\n        float im = abs(getImagAtOutCoords());\n        float mx = max(re, im);\n\n        // sadly the length function in glsl is not underflow-safe\n        // (at least not on Intel GPUs). So the safe solution is\n        // to ensure underflow-safety in all cases.\n        setOutput(\n          mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx))\n        );\n      }\n    "}return ComplexAbsProgram}();function makeComplexComponentTensorInfo(complexTensor,complexPart){return{dataId:complexPart.dataId,dtype:complexPart.dtype,shape:complexTensor.shape}}function complexAbs(args){var inputs=args.inputs,backend=args.backend;var x=inputs.x;var xData=backend.texData.get(x.dataId);var program=new ComplexAbsProgram(x.shape);var programInputs=[makeComplexComponentTensorInfo(x,xData.complexTensorInfos.real),makeComplexComponentTensorInfo(x,xData.complexTensorInfos.imag)];return backend.runWebGLProgram(program,programInputs,programInputs[0].dtype)}var complexAbsConfig={kernelName:tf.ComplexAbs,backendName:"webgl",kernelFunc:complexAbs};var ConcatProgram=function(){function ConcatProgram(shapes){this.outputShape=[];this.outputShape=tf.backend_util.computeOutShape(shapes,1);this.variableNames=shapes.map(function(_,i){return"T"+i});var offsets=new Array(shapes.length-1);offsets[0]=shapes[0][1];for(var i=1;i<offsets.length;i++){offsets[i]=offsets[i-1]+shapes[i][1]}var snippets=["if (yC < "+offsets[0]+") setOutput(getT0(yR, yC));"];for(var i=1;i<offsets.length;i++){var shift=offsets[i-1];snippets.push("else if (yC < "+offsets[i]+") "+("setOutput(getT"+i+"(yR, yC-"+shift+"));"))}var lastIndex=offsets.length;var lastShift=offsets[offsets.length-1];snippets.push("else setOutput(getT"+lastIndex+"(yR, yC-"+lastShift+"));");this.userCode="\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int yR = coords.x;\n        int yC = coords.y;\n\n        "+snippets.join("\n        ")+"\n      }\n    "}return ConcatProgram}();var ConcatPackedProgram=function(){function ConcatPackedProgram(shapes,axis){this.packedInputs=true;this.packedOutput=true;this.outputShape=[];this.outputShape=tf.backend_util.computeOutShape(shapes,axis);var shape=this.outputShape;var rank=shape.length;var dtype=getCoordsDataType(rank);var coords=getChannels("coords",rank);var channels=["x","y","z","w","u","v"].slice(0,rank);this.variableNames=shapes.map(function(_,i){return"T"+i});var offsets=new Array(shapes.length-1);offsets[0]=shapes[0][axis];for(var i=1;i<offsets.length;i++){offsets[i]=offsets[i-1]+shapes[i][axis]}var channel=channels[axis];var lastChannels=channels.slice(-2);var allChannels=channels.join();var getValueSnippet="if ("+channel+" < "+offsets[0]+") {\n        return getChannel(\n            getT0("+allChannels+"), vec2("+lastChannels.join()+"));\n        }";for(var i=1;i<offsets.length;i++){var shift_1=offsets[i-1];getValueSnippet+="\n        if ("+channel+" < "+offsets[i]+"  && "+channel+" >= "+offsets[i-1]+") {\n          return getChannel(\n            getT"+i+"("+shiftedChannels(channels,channel,shift_1)+"),\n            vec2("+shiftedChannels(lastChannels,channel,shift_1)+"));\n        }"}var lastIndex=offsets.length;var shift=offsets[offsets.length-1];getValueSnippet+="\n        return getChannel(\n          getT"+lastIndex+"("+shiftedChannels(channels,channel,shift)+"),\n          vec2("+shiftedChannels(lastChannels,channel,shift)+"));";this.userCode="\n      float getValue("+channels.map(function(x){return"int "+x})+") {\n        "+getValueSnippet+"\n      }\n\n      void main() {\n        "+dtype+" coords = getOutputCoords();\n        vec4 result = vec4(getValue("+coords+"), 0., 0., 0.);\n\n        "+coords[rank-1]+" = "+coords[rank-1]+" + 1;\n        if ("+coords[rank-1]+" < "+shape[rank-1]+") {\n          result.g = getValue("+coords+");\n        }\n\n        "+coords[rank-2]+" = "+coords[rank-2]+" + 1;\n        if ("+coords[rank-2]+" < "+shape[rank-2]+") {\n          result.a = getValue("+coords+");\n        }\n\n        "+coords[rank-1]+" = "+coords[rank-1]+" - 1;\n        if ("+coords[rank-2]+" < "+shape[rank-2]+" &&\n            "+coords[rank-1]+" < "+shape[rank-1]+") {\n          result.b = getValue("+coords+");\n        }\n        setOutput(result);\n      }\n    "}return ConcatPackedProgram}();function shiftedChannels(channels,channel,shift){var channelIdx=channels.indexOf(channel);var res=channels.map(function(c,idx){if(idx===channelIdx){return c+" - "+shift}else{return c}});return res.join()}function imag(args){var inputs=args.inputs,backend=args.backend;var input=inputs.input;var inputData=backend.texData.get(input.dataId);return identity({inputs:{x:inputData.complexTensorInfos.imag},backend:backend})}var imagConfig={kernelName:tf.Imag,backendName:"webgl",kernelFunc:imag};function concatImpl(inputs,axis,backend){var dtype=inputs[0].dtype;if(dtype==="complex64"){var reals=inputs.map(function(t){return real({inputs:{input:t},backend:backend})});var imags=inputs.map(function(t){return imag({inputs:{input:t},backend:backend})});var realConcated=concatImpl(reals,axis,backend);var imagConcated=concatImpl(imags,axis,backend);var result_1=complex({inputs:{real:realConcated,imag:imagConcated},backend:backend});reals.forEach(function(r){return backend.disposeIntermediateTensorInfo(r)});imags.forEach(function(i){return backend.disposeIntermediateTensorInfo(i)});backend.disposeIntermediateTensorInfo(realConcated);backend.disposeIntermediateTensorInfo(imagConcated);return result_1}var runOnCpu=backend.shouldExecuteOnCPU(inputs);if(dtype==="string"){runOnCpu=true}if(runOnCpu){var tensors2D_1=inputs.map(function(t){var innerSize=tf.util.sizeFromShape(t.shape.slice(axis));var shape=[-1,innerSize];return reshape({inputs:{x:t},backend:backend,attrs:{shape:shape}})});var inputsValShapes=tensors2D_1.map(function(t){return{vals:backend.readSync(t.dataId),shape:t.shape}});var outShape_1=tf.backend_util.computeOutShape(tensors2D_1.map(function(t){return t.shape}),1);var simplyConcat=tensors2D_1[0].shape[0]===1;var outVals=concatImplCPU(inputsValShapes,outShape_1,dtype,simplyConcat);var finalOutShape=tf.backend_util.computeOutShape(inputs.map(function(t){return t.shape}),axis);var outInfo=backend.makeTensorInfo(finalOutShape,dtype,outVals);tensors2D_1.forEach(function(t){return backend.disposeIntermediateTensorInfo(t)});return outInfo}if(inputs.length>tf.env().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){var midIndex=Math.floor(inputs.length/2);var leftSide=concatImpl(inputs.slice(0,midIndex),axis,backend);var rightSide=concatImpl(inputs.slice(midIndex),axis,backend);var result_2=concatImpl([leftSide,rightSide],axis,backend);backend.disposeIntermediateTensorInfo(leftSide);backend.disposeIntermediateTensorInfo(rightSide);return result_2}if(tf.env().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&inputs[0].shape.length>1){var program_1=new ConcatPackedProgram(inputs.map(function(t){return t.shape}),axis);return backend.runWebGLProgram(program_1,inputs,dtype)}var _a=computeTensors2D(inputs,axis,backend),tensors2D=_a.tensors2D,outShape=_a.outShape;var program=new ConcatProgram(tensors2D.map(function(t){return t.shape}));var result=backend.runWebGLProgram(program,tensors2D,dtype);tensors2D.forEach(function(r){return backend.disposeIntermediateTensorInfo(r)});var reshapedResult=reshape({inputs:{x:result},attrs:{shape:outShape},backend:backend});backend.disposeIntermediateTensorInfo(result);return reshapedResult}function computeTensors2D(inputs,axis,backend){var outShape=tf.backend_util.computeOutShape(inputs.map(function(t){return t.shape}),axis);var tensors2D=inputs.map(function(x){return reshape({inputs:{x:x},attrs:{shape:[-1,tf.util.sizeFromShape(x.shape.slice(axis))]},backend:backend})});return{tensors2D:tensors2D,outShape:outShape}}function concat(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var axis=attrs.axis;var $axis=tf.util.parseAxisParam(axis,inputs[0].shape)[0];var outShape=tf.backend_util.computeOutShape(inputs.map(function(t){return t.shape}),$axis);if(tf.util.sizeFromShape(outShape)===0){return backend.makeTensorInfo(outShape,inputs[0].dtype,[])}var $inputs=inputs.filter(function(t){return tf.util.sizeFromShape(t.shape)>0});if($inputs.length===1){return identity({inputs:{x:$inputs[0]},backend:backend})}var shapes=$inputs.map(function(t){return t.shape});tf.backend_util.assertParamsConsistent(shapes,$axis);return concatImpl($inputs,$axis,backend)}var concatConfig={kernelName:tf.Concat,backendName:"webgl",kernelFunc:concat};var Conv2DProgram=function(){function Conv2DProgram(convInfo,addBias,activation,hasPreluActivationWeights,hasLeakyreluAlpha){if(addBias===void 0){addBias=false}if(activation===void 0){activation=null}if(hasPreluActivationWeights===void 0){hasPreluActivationWeights=false}if(hasLeakyreluAlpha===void 0){hasLeakyreluAlpha=false}this.variableNames=["x","W"];this.outputShape=convInfo.outShape;var padTop=convInfo.padInfo.top;var padLeft=convInfo.padInfo.left;var strideHeight=convInfo.strideHeight;var strideWidth=convInfo.strideWidth;var dilationHeight=convInfo.dilationHeight;var dilationWidth=convInfo.dilationWidth;var filterHeight=convInfo.filterHeight;var filterWidth=convInfo.filterWidth;var inputDepthNearestVec4=Math.floor(convInfo.inChannels/4)*4;var inputDepthVec4Remainder=convInfo.inChannels%4;var isChannelsLast=convInfo.dataFormat==="channelsLast";var rowDim=isChannelsLast?1:2;var colDim=isChannelsLast?2:3;var channelDim=isChannelsLast?3:1;var activationSnippet="",applyActivationSnippet="";if(activation){if(hasPreluActivationWeights){activationSnippet="float activation(float a) {\n          float b = getPreluActivationWeightsAtOutCoords();\n          "+activation+"\n        }"}else if(hasLeakyreluAlpha){activationSnippet="float activation(float a) {\n          float b = getLeakyreluAlphaAtOutCoords();\n          "+activation+"\n        }"}else{activationSnippet="\n          float activation(float x) {\n            "+activation+"\n          }\n        "}applyActivationSnippet="result = activation(result);"}var addBiasSnippet=addBias?"result += getBiasAtOutCoords();":"";if(addBias){this.variableNames.push("bias")}if(hasPreluActivationWeights){this.variableNames.push("preluActivationWeights")}if(hasLeakyreluAlpha){this.variableNames.push("leakyreluAlpha")}this.userCode="\n      "+activationSnippet+"\n\n      const ivec2 strides = ivec2("+strideHeight+", "+strideWidth+");\n      const ivec2 pads = ivec2("+padTop+", "+padLeft+");\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords[0];\n        int d2 = coords["+channelDim+"];\n\n        ivec2 xRCCorner =\n            ivec2(coords["+rowDim+"], coords["+colDim+"]) * strides - pads;\n        int xRCorner = xRCCorner.x;\n        int xCCorner = xRCCorner.y;\n\n        // Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n        for (int wR = 0; wR < "+filterHeight+"; wR++) {\n          int xR = xRCorner + wR * "+dilationHeight+";\n\n          if (xR < 0 || xR >= "+convInfo.inHeight+") {\n            continue;\n          }\n\n          for (int wC = 0; wC < "+filterWidth+"; wC++) {\n            int xC = xCCorner + wC * "+dilationWidth+";\n\n            if (xC < 0 || xC >= "+convInfo.inWidth+") {\n              continue;\n            }\n\n            for (int d1 = 0; d1 < "+inputDepthNearestVec4+"; d1 += 4) {\n              vec4 wValues = vec4(\n                getW(wR, wC, d1, d2),\n                getW(wR, wC, d1 + 1, d2),\n                getW(wR, wC, d1 + 2, d2),\n                getW(wR, wC, d1 + 3, d2)\n              );\n\n              if ("+isChannelsLast+") {\n                vec4 xValues = vec4(\n                  getX(batch, xR, xC, d1),\n                  getX(batch, xR, xC, d1 + 1),\n                  getX(batch, xR, xC, d1 + 2),\n                  getX(batch, xR, xC, d1 + 3)\n                );\n                dotProd += dot(xValues, wValues);\n              } else {\n                vec4 xValues = vec4(\n                  getX(batch, d1, xR, xC),\n                  getX(batch, d1 + 1, xR, xC),\n                  getX(batch, d1 + 2, xR, xC),\n                  getX(batch, d1 + 3, xR, xC)\n                );\n                dotProd += dot(xValues, wValues);\n              }\n            }\n\n            if ("+(inputDepthVec4Remainder===1)+") {\n\n              if ("+isChannelsLast+") {\n                dotProd +=\n                    getX(batch, xR, xC, "+inputDepthNearestVec4+") *\n                    getW(wR, wC, "+inputDepthNearestVec4+", d2);\n              } else {\n                dotProd +=\n                    getX(batch, "+inputDepthNearestVec4+", xR, xC) *\n                    getW(wR, wC, "+inputDepthNearestVec4+", d2);\n              }\n\n            } else if ("+(inputDepthVec4Remainder===2)+") {\n              vec2 wValues = vec2(\n                getW(wR, wC, "+inputDepthNearestVec4+", d2),\n                getW(wR, wC, "+inputDepthNearestVec4+" + 1, d2)\n              );\n\n              if ("+isChannelsLast+") {\n                vec2 xValues = vec2(\n                  getX(batch, xR, xC, "+inputDepthNearestVec4+"),\n                  getX(batch, xR, xC, "+inputDepthNearestVec4+" + 1)\n                );\n                dotProd += dot(xValues, wValues);\n              } else {\n                vec2 xValues = vec2(\n                  getX(batch, "+inputDepthNearestVec4+", xR, xC),\n                  getX(batch, "+inputDepthNearestVec4+" + 1, xR, xC)\n                );\n                dotProd += dot(xValues, wValues);\n              }\n\n            } else if ("+(inputDepthVec4Remainder===3)+") {\n              vec3 wValues = vec3(\n                getW(wR, wC, "+inputDepthNearestVec4+", d2),\n                getW(wR, wC, "+inputDepthNearestVec4+" + 1, d2),\n                getW(wR, wC, "+inputDepthNearestVec4+" + 2, d2)\n              );\n\n              if ("+isChannelsLast+") {\n                vec3 xValues = vec3(\n                  getX(batch, xR, xC, "+inputDepthNearestVec4+"),\n                  getX(batch, xR, xC, "+inputDepthNearestVec4+" + 1),\n                  getX(batch, xR, xC, "+inputDepthNearestVec4+" + 2)\n                );\n                dotProd += dot(xValues, wValues);\n              } else {\n                vec3 xValues = vec3(\n                  getX(batch, "+inputDepthNearestVec4+", xR, xC),\n                  getX(batch, "+inputDepthNearestVec4+" + 1, xR, xC),\n                  getX(batch, "+inputDepthNearestVec4+" + 2, xR, xC)\n                );\n                dotProd += dot(xValues, wValues);\n              }\n\n            }\n          }\n        }\n\n        float result = dotProd;\n        "+addBiasSnippet+"\n        "+applyActivationSnippet+"\n        setOutput(result);\n      }\n    "}return Conv2DProgram}();var Conv3DProgram=function(){function Conv3DProgram(convInfo){this.variableNames=["x","W"];this.outputShape=convInfo.outShape;var padFront=convInfo.padInfo.front;var padTop=convInfo.padInfo.top;var padLeft=convInfo.padInfo.left;var strideDepth=convInfo.strideDepth;var strideHeight=convInfo.strideHeight;var strideWidth=convInfo.strideWidth;var dilationDepth=convInfo.dilationDepth;var dilationHeight=convInfo.dilationHeight;var dilationWidth=convInfo.dilationWidth;var filterDepth=convInfo.filterDepth;var filterHeight=convInfo.filterHeight;var filterWidth=convInfo.filterWidth;var inputDepthNearestVec4=Math.floor(convInfo.inChannels/4)*4;var inputDepthVec4Remainder=convInfo.inChannels%4;this.userCode="\n      const ivec3 strides = ivec3("+strideDepth+", "+strideHeight+", "+strideWidth+");\n      const ivec3 pads = ivec3("+padFront+", "+padTop+", "+padLeft+");\n\n      void main() {\n        ivec5 coords = getOutputCoords();\n        int batch = coords.x;\n        int d2 = coords.u;\n\n        ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n        int xFCorner = xFRCCorner.x;\n        int xRCorner = xFRCCorner.y;\n        int xCCorner = xFRCCorner.z;\n\n        // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get\n        // y(yF, yR, yC, d2). ? = to be determined. : = across all\n        // values in that axis.\n        float dotProd = 0.0;\n        for (int wF = 0; wF < "+filterDepth+"; wF++) {\n          int xF = xFCorner + wF * "+dilationDepth+";\n\n          if (xF < 0 || xF >= "+convInfo.inDepth+") {\n            continue;\n          }\n\n          for (int wR = 0; wR < "+filterHeight+"; wR++) {\n            int xR = xRCorner + wR * "+dilationHeight+";\n\n            if (xR < 0 || xR >= "+convInfo.inHeight+") {\n              continue;\n            }\n\n            for (int wC = 0; wC < "+filterWidth+"; wC++) {\n              int xC = xCCorner + wC * "+dilationWidth+";\n\n              if (xC < 0 || xC >= "+convInfo.inWidth+") {\n                continue;\n              }\n\n              for (int d1 = 0; d1 < "+inputDepthNearestVec4+"; d1 += 4) {\n                vec4 xValues = vec4(\n                  getX(batch, xF, xR, xC, d1),\n                  getX(batch, xF, xR, xC, d1 + 1),\n                  getX(batch, xF, xR, xC, d1 + 2),\n                  getX(batch, xF, xR, xC, d1 + 3)\n                );\n                vec4 wValues = vec4(\n                  getW(wF, wR, wC, d1, d2),\n                  getW(wF, wR, wC, d1 + 1, d2),\n                  getW(wF, wR, wC, d1 + 2, d2),\n                  getW(wF, wR, wC, d1 + 3, d2)\n                );\n\n                dotProd += dot(xValues, wValues);\n              }\n\n              if ("+(inputDepthVec4Remainder===1)+") {\n                dotProd +=\n                  getX(batch, xF, xR, xC, "+inputDepthNearestVec4+") *\n                  getW(wF, wR, wC, "+inputDepthNearestVec4+", d2);\n              } else if ("+(inputDepthVec4Remainder===2)+") {\n                vec2 xValues = vec2(\n                  getX(batch, xF, xR, xC, "+inputDepthNearestVec4+"),\n                  getX(batch, xF, xR, xC, "+inputDepthNearestVec4+" + 1)\n                );\n                vec2 wValues = vec2(\n                  getW(wF, wR, wC, "+inputDepthNearestVec4+", d2),\n                  getW(wF, wR, wC, "+inputDepthNearestVec4+" + 1, d2)\n                );\n                dotProd += dot(xValues, wValues);\n              } else if ("+(inputDepthVec4Remainder===3)+") {\n                vec3 xValues = vec3(\n                  getX(batch, xF, xR, xC, "+inputDepthNearestVec4+"),\n                  getX(batch, xF, xR, xC, "+inputDepthNearestVec4+" + 1),\n                  getX(batch, xF, xR, xC, "+inputDepthNearestVec4+" + 2)\n                );\n                vec3 wValues = vec3(\n                  getW(wF, wR, wC, "+inputDepthNearestVec4+", d2),\n                  getW(wF, wR, wC, "+inputDepthNearestVec4+" + 1, d2),\n                  getW(wF, wR, wC, "+inputDepthNearestVec4+" + 2, d2)\n                );\n                dotProd += dot(xValues, wValues);\n              }\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    "}return Conv3DProgram}();var Im2ColPackedProgram=function(){function Im2ColPackedProgram(outputShape,convInfo){this.variableNames=["A"];this.packedInputs=true;this.packedOutput=true;this.customUniforms=[{name:"inputShape",type:"ivec3"},{name:"pad",type:"ivec2"},{name:"stride",type:"ivec2"},{name:"dilation",type:"ivec2"},{name:"inChannels",type:"int"},{name:"itemsPerBlockRow",type:"int"},{name:"outWidth",type:"int"}];this.outputShape=outputShape;this.enableShapeUniforms=useShapeUniforms(this.outputShape.length);var dataFormat=convInfo.dataFormat;var glsl=getGlslDifferences();var isChannelsLast=dataFormat==="channelsLast";var rowDim=isChannelsLast?0:1;var colDim=isChannelsLast?1:2;var boundsCheckingSnippet=this.enableShapeUniforms?"if(blockIndex < outShape[1] && pos < outShape[0]) {":"if(blockIndex < "+outputShape[1]+" && pos < "+outputShape[0]+") {";var unrolled="";for(var row=0;row<=1;row++){for(var col=0;col<=1;col++){unrolled+="\n          blockIndex = rc.y + "+col+";\n          pos = rc.x + "+row+";\n\n          "+boundsCheckingSnippet+"\n            offsetY = int(blockIndex / outWidth) * stride[0] - pad[0];\n            d0 = offsetY + dilation[0] * (pos / itemsPerBlockRow);\n\n            if(d0 < inputShape["+rowDim+"] && d0 >= 0) {\n              // Use custom imod instead mod. On Intel GPU, mod may generate\n              // unexpected value.\n              // https://github.com/tensorflow/tfjs/issues/5447\n              offsetX = imod(blockIndex, outWidth) * stride[1] - pad[1];\n              d1 = offsetX + dilation[1] * (imod(pos, itemsPerBlockRow) /\n                  inChannels);\n\n              if(d1 < inputShape["+colDim+"] && d1 >= 0) {\n\n                ch = imod(pos, inChannels);\n\n                if ("+isChannelsLast+") {\n                  innerDims = vec2(d1, ch);\n                  result["+(row*2+col)+"] = getChannel(\n                    getA(d0, int(innerDims.x),\n                    int(innerDims.y)), innerDims);\n                } else {\n                  innerDims = vec2(d0, d1);\n                  result["+(row*2+col)+"] = getChannel(\n                    getA(ch, int(innerDims.x),\n                    int(innerDims.y)), innerDims);\n                }\n              }\n            }\n          }\n        "}}this.userCode="\n      void main() {\n        ivec2 rc = getOutputCoords();\n\n        vec4 result = vec4(0);\n\n        int blockIndex, pos, offsetY, d0, offsetX, d1, ch;\n        vec2 innerDims;\n\n        "+unrolled+"\n\n        "+glsl.output+" = result;\n      }\n    "}return Im2ColPackedProgram}();function conv2dByMatMul(_a){var e_1,_b;var x=_a.x,filter=_a.filter,convInfo=_a.convInfo,backend=_a.backend,_c=_a.bias,bias=_c===void 0?null:_c,_d=_a.preluActivationWeights,preluActivationWeights=_d===void 0?null:_d,_e=_a.leakyreluAlpha,leakyreluAlpha=_e===void 0?0:_e,_f=_a.activation,activation=_f===void 0?null:_f;var xShape=x.shape;var xTexData=backend.texData.get(x.dataId);var sharedMatMulDim=convInfo.inChannels;var outerShapeX=xShape[0]*xShape[1]*xShape[2];var outerShapeFilter=convInfo.outChannels;var isChannelsLast=convInfo.dataFormat==="channelsLast";var transposeA=false;var transposeB=false;var out;var intermediates=[];var batchMatMulWillBeUnpacked=(outerShapeX===1||outerShapeFilter===1)&&sharedMatMulDim>MATMUL_SHARED_DIM_THRESHOLD;var canOptimize=!batchMatMulWillBeUnpacked&&xTexData.isPacked&&isChannelsLast&&xTexData.texture!=null&&xShape[2]%2!==0&&tf.util.arraysEqual(xTexData.shape.slice(-3),xShape.slice(-3));if(canOptimize){var targetShape=xShape[0]*xShape[1]*(xShape[2]+1);var xReshaped_1={dataId:x.dataId,shape:[1,targetShape,convInfo.inChannels],dtype:x.dtype};var originalXTexDataShape=xTexData.shape;xTexData.shape=xTexData.shape.slice();xTexData.shape[xTexData.shape.length-2]++;tf.util.assert(isReshapeFree(xTexData.shape,xReshaped_1.shape),function(){return"packed reshape "+xTexData.shape+" to "+xReshaped_1.shape+" isn't free"});var filterReshaped=reshape({inputs:{x:filter},backend:backend,attrs:{shape:[1,convInfo.inChannels,convInfo.outChannels]}});intermediates.push(filterReshaped);var pointwiseConv=batchMatMulImpl({a:xReshaped_1,b:filterReshaped,backend:backend,transposeA:transposeA,transposeB:transposeB,bias:bias,activation:activation,preluActivationWeights:preluActivationWeights,leakyreluAlpha:leakyreluAlpha});var pointwiseConvTexData=backend.texData.get(pointwiseConv.dataId);tf.util.assert(pointwiseConvTexData.isPacked,function(){return"batchMatMul result is expected to be packed"});xTexData.shape=originalXTexDataShape;pointwiseConvTexData.shape=convInfo.outShape;out=identity({inputs:{x:pointwiseConv},backend:backend});out.shape=convInfo.outShape;intermediates.push(pointwiseConv)}else{var targetShape=isChannelsLast?xShape[0]*xShape[1]*xShape[2]:xShape[0]*xShape[2]*xShape[3];var xReshaped=reshape({inputs:{x:x},backend:backend,attrs:{shape:[1,targetShape,convInfo.inChannels]}});var filterReshaped=reshape({inputs:{x:filter},backend:backend,attrs:{shape:[1,convInfo.inChannels,convInfo.outChannels]}});var result=batchMatMulImpl({a:xReshaped,b:filterReshaped,transposeA:transposeA,transposeB:transposeB,backend:backend,bias:bias,activation:activation,preluActivationWeights:preluActivationWeights,leakyreluAlpha:leakyreluAlpha});out=reshape({inputs:{x:result},backend:backend,attrs:{shape:convInfo.outShape}});intermediates.push(xReshaped);intermediates.push(filterReshaped);intermediates.push(result)}try{for(var intermediates_1=__values(intermediates),intermediates_1_1=intermediates_1.next();!intermediates_1_1.done;intermediates_1_1=intermediates_1.next()){var i=intermediates_1_1.value;backend.disposeIntermediateTensorInfo(i)}}catch(e_1_1){e_1={error:e_1_1}}finally{try{if(intermediates_1_1&&!intermediates_1_1.done&&(_b=intermediates_1.return))_b.call(intermediates_1)}finally{if(e_1)throw e_1.error}}return out}function conv2dWithIm2Row(_a){var e_2,_b;var x=_a.x,filter=_a.filter,convInfo=_a.convInfo,backend=_a.backend,_c=_a.bias,bias=_c===void 0?null:_c,_d=_a.preluActivationWeights,preluActivationWeights=_d===void 0?null:_d,_e=_a.leakyreluAlpha,leakyreluAlpha=_e===void 0?0:_e,_f=_a.activation,activation=_f===void 0?null:_f;var filterWidth=convInfo.filterWidth,filterHeight=convInfo.filterHeight,inChannels=convInfo.inChannels,outWidth=convInfo.outWidth,outHeight=convInfo.outHeight,dataFormat=convInfo.dataFormat;var isChannelsLast=dataFormat==="channelsLast";var sharedDim=filterWidth*filterHeight*inChannels;var numCols=outHeight*outWidth;var x2ColShape=[sharedDim,numCols];var transposeA=true;var transposeB=false;var intermediates=[];var xSqueezed=reshape({inputs:{x:x},backend:backend,attrs:{shape:x.shape.slice(1)}});var w2Row=reshape({inputs:{x:filter},backend:backend,attrs:{shape:[1,sharedDim,tf.util.sizeFromShape(filter.shape)/sharedDim]}});intermediates.push(xSqueezed);intermediates.push(w2Row);var im2ColProgram=new Im2ColPackedProgram(x2ColShape,convInfo);var customValues=[xSqueezed.shape,[convInfo.padInfo.top,convInfo.padInfo.left],[convInfo.strideHeight,convInfo.strideWidth],[convInfo.dilationHeight,convInfo.dilationWidth],[convInfo.inChannels],[convInfo.filterWidth*convInfo.inChannels],[convInfo.outWidth]];var im2Col=backend.runWebGLProgram(im2ColProgram,[xSqueezed],"float32",customValues);var im2ColReshaped=reshape({inputs:{x:im2Col},backend:backend,attrs:{shape:[1,x2ColShape[0],x2ColShape[1]]}});intermediates.push(im2Col);intermediates.push(im2ColReshaped);var hasBias=bias!=null;var hasPreluActivationWeights=preluActivationWeights!=null;var hasLeakyreluAlpha=activation==="leakyrelu";var fusedActivation=activation?mapActivationToShaderProgram(activation,true):null;var matmulProgram=new MatMulPackedProgram(im2ColReshaped.shape,w2Row.shape,[1,numCols,convInfo.outChannels],transposeA,transposeB,hasBias,fusedActivation,hasPreluActivationWeights,hasLeakyreluAlpha);var inputs=[im2ColReshaped,w2Row];if(bias){inputs.push(bias)}if(hasPreluActivationWeights){inputs.push(preluActivationWeights)}if(hasLeakyreluAlpha){var $leakyreluAlpha=backend.makeTensorInfo([],"float32",tf.util.createScalarValue(leakyreluAlpha,"float32"));inputs.push($leakyreluAlpha);intermediates.push($leakyreluAlpha)}var product=backend.runWebGLProgram(matmulProgram,inputs,"float32");var outShape=isChannelsLast?[1,outHeight,outWidth,convInfo.outChannels]:[1,convInfo.outChannels,outHeight,outWidth];var out=reshape({inputs:{x:product},backend:backend,attrs:{shape:outShape}});intermediates.push(product);try{for(var intermediates_2=__values(intermediates),intermediates_2_1=intermediates_2.next();!intermediates_2_1.done;intermediates_2_1=intermediates_2.next()){var i=intermediates_2_1.value;backend.disposeIntermediateTensorInfo(i)}}catch(e_2_1){e_2={error:e_2_1}}finally{try{if(intermediates_2_1&&!intermediates_2_1.done&&(_b=intermediates_2.return))_b.call(intermediates_2)}finally{if(e_2)throw e_2.error}}return out}function conv2d(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,filter=inputs.filter;var strides=attrs.strides,pad=attrs.pad,dataFormat=attrs.dataFormat,dilations=attrs.dilations,dimRoundingMode=attrs.dimRoundingMode;var $dataFormat=tf.backend_util.convertConv2DDataFormat(dataFormat);var convInfo=tf.backend_util.computeConv2DInfo(x.shape,filter.shape,strides,dilations,pad,dimRoundingMode,false,$dataFormat);var out;if(convInfo.filterHeight===1&&convInfo.filterWidth===1&&convInfo.dilationHeight===1&&convInfo.dilationWidth===1&&convInfo.strideHeight===1&&convInfo.strideWidth===1&&(convInfo.padInfo.type==="SAME"||convInfo.padInfo.type==="VALID")){out=conv2dByMatMul({x:x,filter:filter,convInfo:convInfo,backend:backend})}else if(tf.env().getBool("WEBGL_CONV_IM2COL")&&x.shape[0]===1){out=conv2dWithIm2Row({x:x,filter:filter,convInfo:convInfo,backend:backend})}else{var program=new Conv2DProgram(convInfo);out=backend.runWebGLProgram(program,[x,filter],"float32")}var outReshaped=reshape({inputs:{x:out},backend:backend,attrs:{shape:convInfo.outShape}});backend.disposeIntermediateTensorInfo(out);return outReshaped}var conv2DConfig={kernelName:tf.Conv2D,backendName:"webgl",kernelFunc:conv2d};var Conv2DDerFilterProgram=function(){function Conv2DDerFilterProgram(convInfo){this.variableNames=["x","dy"];this.outputShape=convInfo.filterShape;var strideHeight=convInfo.strideHeight;var strideWidth=convInfo.strideWidth;var padTop=convInfo.padInfo.top;var padLeft=convInfo.padInfo.left;var isChannelsLast=convInfo.dataFormat==="channelsLast";this.userCode="\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int wR = coords.x;\n        int wC = coords.y;\n        int d1 = coords.z;\n        int d2 = coords.w;\n\n        // Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n\n        for (int b = 0; b < "+convInfo.batchSize+"; b++) {\n          for (int yR = 0; yR < "+convInfo.outHeight+"; yR++) {\n            int xR = wR + yR * "+strideHeight+" - "+padTop+";\n\n            if (xR < 0 || xR >= "+convInfo.inHeight+") {\n              continue;\n            }\n\n            for (int yC = 0; yC < "+convInfo.outWidth+"; yC++) {\n              int xC = wC + yC * "+strideWidth+" - "+padLeft+";\n\n              if (xC < 0 || xC >= "+convInfo.inWidth+") {\n                continue;\n              }\n\n              if ("+isChannelsLast+") {\n                float dyValue = getDy(b, yR, yC, d2);\n                float xValue = getX(b, xR, xC, d1);\n                dotProd += (xValue * dyValue);\n              } else {\n                float dyValue = getDy(b, d2, yR, yC);\n                float xValue = getX(b, d1, xR, xC);\n                dotProd += (xValue * dyValue);\n              }\n\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    "}return Conv2DDerFilterProgram}();var Conv2DDerInputProgram=function(){function Conv2DDerInputProgram(convInfo){this.variableNames=["dy","W"];this.outputShape=convInfo.inShape;var filterHeight=convInfo.filterHeight;var filterWidth=convInfo.filterWidth;var strideHeight=convInfo.strideHeight;var strideWidth=convInfo.strideWidth;var isChannelsLast=convInfo.dataFormat==="channelsLast";var padTop=filterHeight-1-convInfo.padInfo.top;var padLeft=filterWidth-1-convInfo.padInfo.left;var rowDim=isChannelsLast?1:2;var colDim=isChannelsLast?2:3;var channelDim=isChannelsLast?3:1;this.userCode="\n      const ivec2 pads = ivec2("+padTop+", "+padLeft+");\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords[0];\n        int d1 = coords["+channelDim+"];\n\n        ivec2 dyCorner = ivec2(coords["+rowDim+"], coords["+colDim+"]) - pads;\n        int dyRCorner = dyCorner.x;\n        int dyCCorner = dyCorner.y;\n\n        // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n        for (int wR = 0; wR < "+filterHeight+"; wR++) {\n          float dyR = float(dyRCorner + wR) / "+strideHeight+".0;\n\n          if (dyR < 0.0 || dyR >= "+convInfo.outHeight+".0 || fract(dyR) > 0.0) {\n            continue;\n          }\n          int idyR = int(dyR);\n\n          int wRPerm = "+filterHeight+" - 1 - wR;\n\n          for (int wC = 0; wC < "+filterWidth+"; wC++) {\n            float dyC = float(dyCCorner + wC) / "+strideWidth+".0;\n\n            if (dyC < 0.0 || dyC >= "+convInfo.outWidth+".0 ||\n                fract(dyC) > 0.0) {\n              continue;\n            }\n            int idyC = int(dyC);\n\n            int wCPerm = "+filterWidth+" - 1 - wC;\n\n            for (int d2 = 0; d2 < "+convInfo.outChannels+"; d2++) {\n\n              if ("+isChannelsLast+") {\n                float xValue = getDy(batch, idyR, idyC, d2);\n                float wValue = getW(wRPerm, wCPerm, d1, d2);\n                dotProd += xValue * wValue;\n              } else {\n                float xValue = getDy(batch, d2, idyR, idyC);\n                float wValue = getW(wRPerm, wCPerm, d1, d2);\n                dotProd += xValue * wValue;\n              }\n\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    "}return Conv2DDerInputProgram}();var Conv3DDerFilterProgram=function(){function Conv3DDerFilterProgram(convInfo){this.variableNames=["x","dy"];this.outputShape=convInfo.filterShape;var strideDepth=convInfo.strideDepth;var strideHeight=convInfo.strideHeight;var strideWidth=convInfo.strideWidth;var padFront=convInfo.padInfo.front;var padTop=convInfo.padInfo.top;var padLeft=convInfo.padInfo.left;this.userCode="\n      void main() {\n        ivec5 coords = getOutputCoords();\n        int wF = coords.x;\n        int wR = coords.y;\n        int wC = coords.z;\n        int d1 = coords.w;\n        int d2 = coords.u;\n\n        float dotProd = 0.0;\n\n        for (int b = 0; b < "+convInfo.batchSize+"; b++) {\n          for (int yF = 0; yF < "+convInfo.outDepth+"; yF++) {\n            int xF = wF + yF * "+strideDepth+" - "+padFront+";\n\n            if (xF < 0 || xF >= "+convInfo.inDepth+") {\n              continue;\n            }\n\n            for (int yR = 0; yR < "+convInfo.outHeight+"; yR++) {\n              int xR = wR + yR * "+strideHeight+" - "+padTop+";\n\n              if (xR < 0 || xR >= "+convInfo.inHeight+") {\n                continue;\n              }\n\n              for (int yC = 0; yC < "+convInfo.outWidth+"; yC++) {\n                int xC = wC + yC * "+strideWidth+" - "+padLeft+";\n\n                if (xC < 0 || xC >= "+convInfo.inWidth+") {\n                  continue;\n                }\n\n                float dyValue = getDy(b, yF, yR, yC, d2);\n                float xValue = getX(b, xF, xR, xC, d1);\n                dotProd += (xValue * dyValue);\n              }\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    "}return Conv3DDerFilterProgram}();var Conv3DDerInputProgram=function(){function Conv3DDerInputProgram(convInfo){this.variableNames=["dy","W"];this.outputShape=convInfo.inShape;var filterDepth=convInfo.filterDepth;var filterHeight=convInfo.filterHeight;var filterWidth=convInfo.filterWidth;var strideDepth=convInfo.strideDepth;var strideHeight=convInfo.strideHeight;var strideWidth=convInfo.strideWidth;var padFront=filterDepth-1-convInfo.padInfo.front;var padTop=filterHeight-1-convInfo.padInfo.top;var padLeft=filterWidth-1-convInfo.padInfo.left;this.userCode="\n      const ivec3 pads = ivec3("+padFront+", "+padTop+", "+padLeft+");\n\n      void main() {\n        ivec5 coords = getOutputCoords();\n        int batch = coords.x;\n        int d1 = coords.u;\n\n\n        ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n        int dyFCorner = dyCorner.x;\n        int dyRCorner = dyCorner.y;\n        int dyCCorner = dyCorner.z;\n\n        float dotProd = 0.0;\n        for (int wF = 0; wF < "+filterDepth+"; wF++) {\n          float dyF = float(dyFCorner + wF) / "+strideDepth+".0;\n\n          if (dyF < 0.0 || dyF >= "+convInfo.outDepth+".0 || fract(dyF) > 0.0) {\n            continue;\n          }\n          int idyF = int(dyF);\n\n          int wFPerm = "+filterDepth+" - 1 - wF;\n\n          for (int wR = 0; wR < "+filterHeight+"; wR++) {\n            float dyR = float(dyRCorner + wR) / "+strideHeight+".0;\n\n            if (dyR < 0.0 || dyR >= "+convInfo.outHeight+".0 ||\n              fract(dyR) > 0.0) {\n              continue;\n            }\n            int idyR = int(dyR);\n\n            int wRPerm = "+filterHeight+" - 1 - wR;\n\n            for (int wC = 0; wC < "+filterWidth+"; wC++) {\n              float dyC = float(dyCCorner + wC) / "+strideWidth+".0;\n\n              if (dyC < 0.0 || dyC >= "+convInfo.outWidth+".0 ||\n                  fract(dyC) > 0.0) {\n                continue;\n              }\n              int idyC = int(dyC);\n\n              int wCPerm = "+filterWidth+" - 1 - wC;\n\n              for (int d2 = 0; d2 < "+convInfo.outChannels+"; d2++) {\n                float xValue = getDy(batch, idyF, idyR, idyC, d2);\n                float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);\n                dotProd += xValue * wValue;\n              }\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    "}return Conv3DDerInputProgram}();function conv2DBackpropFilter(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,dy=inputs.dy;var strides=attrs.strides,pad=attrs.pad,dataFormat=attrs.dataFormat,dimRoundingMode=attrs.dimRoundingMode,filterShape=attrs.filterShape;var $dataFormat=tf.backend_util.convertConv2DDataFormat(dataFormat);var convInfo=tf.backend_util.computeConv2DInfo(x.shape,filterShape,strides,1,pad,dimRoundingMode,false,$dataFormat);var program=new Conv2DDerFilterProgram(convInfo);return backend.runWebGLProgram(program,[x,dy],"float32")}var conv2DBackpropFilterConfig={kernelName:tf.Conv2DBackpropFilter,backendName:"webgl",kernelFunc:conv2DBackpropFilter};function conv2DBackpropInput(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var dy=inputs.dy,filter=inputs.filter;var inputShape=attrs.inputShape,strides=attrs.strides,pad=attrs.pad,dataFormat=attrs.dataFormat,dimRoundingMode=attrs.dimRoundingMode;var $dataFormat=tf.backend_util.convertConv2DDataFormat(dataFormat);var convInfo=tf.backend_util.computeConv2DInfo(inputShape,filter.shape,strides,1,pad,dimRoundingMode,false,$dataFormat);var program=new Conv2DDerInputProgram(convInfo);return backend.runWebGLProgram(program,[dy,filter],"float32")}var conv2DBackpropInputConfig={kernelName:tf.Conv2DBackpropInput,backendName:"webgl",kernelFunc:conv2DBackpropInput};function conv3D(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,filter=inputs.filter;var strides=attrs.strides,pad=attrs.pad,dilations=attrs.dilations;var convInfo=tf.backend_util.computeConv3DInfo(x.shape,filter.shape,strides,dilations,pad);var program=new Conv3DProgram(convInfo);return backend.runWebGLProgram(program,[x,filter],"float32")}var conv3DConfig={kernelName:tf.Conv3D,backendName:"webgl",kernelFunc:conv3D};function conv3DBackpropFilterV2(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,dy=inputs.dy;var strides=attrs.strides,pad=attrs.pad,filterShape=attrs.filterShape;var convInfo=tf.backend_util.computeConv3DInfo(x.shape,filterShape,strides,1,pad);var program=new Conv3DDerFilterProgram(convInfo);return backend.runWebGLProgram(program,[x,dy],"float32")}var conv3DBackpropFilterV2Config={kernelName:tf.Conv3DBackpropFilterV2,backendName:"webgl",kernelFunc:conv3DBackpropFilterV2};function conv3DBackpropInput(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var dy=inputs.dy,filter=inputs.filter;var pad=attrs.pad,strides=attrs.strides,inputShape=attrs.inputShape;var convInfo=tf.backend_util.computeConv3DInfo(inputShape,filter.shape,strides,1,pad);var program=new Conv3DDerInputProgram(convInfo);return backend.runWebGLProgram(program,[dy,filter],"float32")}var conv3DBackpropInputConfig={kernelName:tf.Conv3DBackpropInputV2,backendName:"webgl",kernelFunc:conv3DBackpropInput};var COS=CHECK_NAN_SNIPPET_UNARY+"\n  return cos(x);\n";var cos=unaryKernelFunc({opSnippet:COS});var cosConfig={kernelName:tf.Cos,backendName:"webgl",kernelFunc:cos};var COSH="\n  float e2x = exp(-x);\n  return (e2x + 1.0 / e2x) / 2.0;\n";var cosh=unaryKernelFunc({opSnippet:COSH});var coshConfig={kernelName:tf.Cosh,backendName:"webgl",kernelFunc:cosh};var CropAndResizeProgram=function(){function CropAndResizeProgram(imageShape,boxShape,cropSize,method,extrapolationValue){this.variableNames=["Image","Boxes","BoxInd"];this.outputShape=[];var _a=__read(imageShape,4),batch=_a[0],imageHeight=_a[1],imageWidth=_a[2],depth=_a[3];var _b=__read(boxShape,1),numBoxes=_b[0];var _c=__read(cropSize,2),cropHeight=_c[0],cropWidth=_c[1];this.outputShape=[numBoxes,cropHeight,cropWidth,depth];var methodId=method==="bilinear"?1:0;var _d=__read([imageHeight-1+".0",imageWidth-1+".0"],2),inputHeightFloat=_d[0],inputWidthFloat=_d[1];var _e=__read(cropHeight>1?[""+(imageHeight-1)/(cropHeight-1),"(y2-y1) * height_ratio","y1*"+inputHeightFloat+" + float(y)*(height_scale)"]:["0.0","0.0","0.5 * (y1+y2) * "+inputHeightFloat],3),heightRatio=_e[0],heightScale=_e[1],inY=_e[2];var _f=__read(cropWidth>1?[""+(imageWidth-1)/(cropWidth-1),"(x2-x1) * width_ratio","x1*"+inputWidthFloat+" + float(x)*(width_scale)"]:["0.0","0.0","0.5 * (x1+x2) * "+inputWidthFloat],3),widthRatio=_f[0],widthScale=_f[1],inX=_f[2];this.userCode="\n      const float height_ratio = float("+heightRatio+");\n      const float width_ratio = float("+widthRatio+");\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int y = coords[1];\n        int x = coords[2];\n        int d = coords[3];\n\n        // get box vals\n        float y1 = getBoxes(b,0);\n        float x1 = getBoxes(b,1);\n        float y2 = getBoxes(b,2);\n        float x2 = getBoxes(b,3);\n\n        // get image in batch index\n        int bInd = round(getBoxInd(b));\n        if(bInd < 0 || bInd >= "+batch+") {\n          return;\n        }\n\n        float height_scale = "+heightScale+";\n        float width_scale = "+widthScale+";\n\n        float in_y = "+inY+";\n        if( in_y < 0.0 || in_y > "+inputHeightFloat+" ) {\n          setOutput(float("+extrapolationValue+"));\n          return;\n        }\n        float in_x = "+inX+";\n        if( in_x < 0.0 || in_x > "+inputWidthFloat+" ) {\n          setOutput(float("+extrapolationValue+"));\n          return;\n        }\n\n        vec2 sourceFracIndexCR = vec2(in_x,in_y);\n        if("+methodId+" == 1) {\n          // Compute the four integer indices.\n          ivec2 sourceFloorCR = ivec2(sourceFracIndexCR);\n          ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR));\n\n          float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d);\n          float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d);\n          float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d);\n          float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d);\n\n          vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR);\n\n          float top = topLeft + (topRight - topLeft) * fracCR.x;\n          float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;\n          float newValue = top + (bottom - top) * fracCR.y;\n          setOutput(newValue);\n        } else {\n          // Compute the coordinators of nearest neighbor point.\n          ivec2 sourceNearestCR = ivec2(floor(\n            sourceFracIndexCR + vec2(0.5,0.5)));\n          float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d);\n          setOutput(newValue);\n        }\n      }\n    "}return CropAndResizeProgram}();var cropAndResize=function(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var image=inputs.image,boxes=inputs.boxes,boxInd=inputs.boxInd;var cropSize=attrs.cropSize,method=attrs.method,extrapolationValue=attrs.extrapolationValue;var program=new CropAndResizeProgram(image.shape,boxes.shape,cropSize,method,extrapolationValue);return backend.runWebGLProgram(program,[image,boxes,boxInd],"float32")};var cropAndResizeConfig={kernelName:tf.CropAndResize,backendName:"webgl",kernelFunc:cropAndResize};var CumSumProgram=function(){function CumSumProgram(shape,exclusive,reverse){this.variableNames=["x"];this.customUniforms=[{name:"index",type:"float"}];this.outputShape=shape;var rank=shape.length;var val=exclusive?"0.0":"getX("+getCoords(rank,"coords")+")";var length=shape[shape.length-1];var condition="";var idxString="";if(exclusive){condition=reverse?"end != "+(length-1):"end != 0";idxString=reverse?"end + 1":"end - 1"}else{condition=reverse?"end + pow2 < "+length:"end >= pow2";idxString=reverse?"end + pow2":"end - pow2"}this.userCode="\n      void main() {\n        "+getCoordsDataType(rank)+" coords = getOutputCoords();\n        int end = "+getFinalCoord(rank,"coords")+";\n        float val = "+val+";\n        int pow2 = int(pow(2.0, index));\n        if ("+condition+") {\n          int idx = "+idxString+";\n          "+getFinalCoord(rank,"coords")+" = idx;\n          val += getX("+getCoords(rank,"coords")+");\n        }\n        setOutput(val);\n      }\n    "}return CumSumProgram}();function getCoords(rank,name){if(rank===1){return""+name}else if(rank===2){return name+".x, "+name+".y"}else if(rank===3){return name+".x, "+name+".y, "+name+".z"}else if(rank===4){return name+".x, "+name+".y, "+name+".z, "+name+".w"}else{throw Error("Cumulative sum for rank "+rank+" is not yet supported")}}function getFinalCoord(rank,name){if(rank===1){return""+name}else if(rank===2){return name+".y"}else if(rank===3){return name+".z"}else if(rank===4){return name+".w"}else{throw Error("Cumulative sum for rank "+rank+" is not yet supported")}}function cumsum(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var axis=attrs.axis,exclusive=attrs.exclusive,reverse=attrs.reverse;var xRank=x.shape.length;var permutation=tf.backend_util.getAxesPermutation([axis],xRank);var permutedX=x;if(permutation!=null){permutedX=transpose({inputs:{x:x},backend:backend,attrs:{perm:permutation}})}var permutedAxis=tf.backend_util.getInnerMostAxes(1,xRank)[0];if(permutedAxis!==xRank-1){throw new Error("WebGL cumsum shader expects an inner-most axis="+(x.shape.length-1)+" "+("but got axis="+axis))}var size=permutedX.shape[permutedAxis];var result=identity({inputs:{x:permutedX},backend:backend});for(var i=0;i<=Math.ceil(Math.log2(size))-1;i++){var program=new CumSumProgram(permutedX.shape,false,reverse);var customValues=[[i]];var prevResult=result;result=backend.runWebGLProgram(program,[result],result.dtype,customValues);backend.disposeIntermediateTensorInfo(prevResult)}if(exclusive){var program=new CumSumProgram(permutedX.shape,exclusive,reverse);var prevResult=result;result=backend.runWebGLProgram(program,[result],result.dtype);backend.disposeIntermediateTensorInfo(prevResult)}if(permutation!=null){var reversePermutation=tf.backend_util.getUndoAxesPermutation(permutation);var reverseTransposedResult=transpose({inputs:{x:result},backend:backend,attrs:{perm:reversePermutation}});backend.disposeIntermediateTensorInfo(result);backend.disposeIntermediateTensorInfo(permutedX);return reverseTransposedResult}return result}var cumsumConfig={kernelName:tf.Cumsum,backendName:"webgl",kernelFunc:cumsum};function denseBincount(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,weights=inputs.weights;var size=attrs.size,binaryOutput=attrs.binaryOutput;if(x.shape.length===1){var xVals=backend.readSync(x.dataId);var weightsVals=backend.readSync(weights.dataId);var outVals=bincountImplCPU(xVals,weightsVals,weights.dtype,weights.shape,size);return backend.makeTensorInfo([size],weights.dtype,outVals)}else if(x.shape.length===2){var xBuf=backend.bufferSync(x);var weightsBuf=backend.bufferSync(weights);var outBuf=bincountReduceImplCPU(xBuf,weightsBuf,size,binaryOutput);return backend.makeTensorInfo(outBuf.shape,weights.dtype,outBuf.values)}throw new Error("Error in denseBincount: input must be at most rank 2, but got rank"+(x.shape.length+"."))}var denseBincountConfig={kernelName:tf.DenseBincount,backendName:"webgl",kernelFunc:denseBincount};var DepthToSpaceProgram=function(){function DepthToSpaceProgram(outputShape,blockSize,dataFormat){this.variableNames=["x"];this.outputShape=[];this.outputShape=outputShape;this.blockSize=blockSize;this.dataFormat=dataFormat;this.userCode="\n    void main() {\n      ivec4 coords = getOutputCoords();\n      int b = coords[0];\n      int h = "+this.getHeightCoordString()+";\n      int w = "+this.getWidthCoordString()+";\n      int d = "+this.getDepthCoordString()+";\n\n      int in_h = h / "+blockSize+";\n      int offset_h = imod(h, "+blockSize+");\n      int in_w = w / "+blockSize+";\n      int offset_w = imod(w, "+blockSize+");\n      int offset_d = (offset_h * "+blockSize+" + offset_w) *\n        "+this.getOutputDepthSize()+";\n      int in_d = d + offset_d;\n\n      float result = "+this.getInputSamplingString()+";\n      setOutput(result);\n    }\n  "}DepthToSpaceProgram.prototype.getHeightCoordString=function(){if(this.dataFormat==="NHWC"){return"coords[1]"}else{return"coords[2]"}};DepthToSpaceProgram.prototype.getWidthCoordString=function(){if(this.dataFormat==="NHWC"){return"coords[2]"}else{return"coords[3]"}};DepthToSpaceProgram.prototype.getDepthCoordString=function(){if(this.dataFormat==="NHWC"){return"coords[3]"}else{return"coords[1]"}};DepthToSpaceProgram.prototype.getOutputDepthSize=function(){if(this.dataFormat==="NHWC"){return this.outputShape[3]}else{return this.outputShape[1]}};DepthToSpaceProgram.prototype.getInputSamplingString=function(){if(this.dataFormat==="NHWC"){return"getX(b, in_h, in_w, in_d)"}else{return"getX(b, in_d, in_h, in_w)"}};return DepthToSpaceProgram}();function depthToSpace(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var blockSize=attrs.blockSize,dataFormat=attrs.dataFormat;var batchSize=x.shape[0];var inputHeight=dataFormat==="NHWC"?x.shape[1]:x.shape[2];var inputWidth=dataFormat==="NHWC"?x.shape[2]:x.shape[3];var inputDepth=dataFormat==="NHWC"?x.shape[3]:x.shape[1];var outputHeight=inputHeight*blockSize;var outputWidth=inputWidth*blockSize;var outputDepth=inputDepth/(blockSize*blockSize);var outputShape=dataFormat==="NHWC"?[batchSize,outputHeight,outputWidth,outputDepth]:[batchSize,outputDepth,outputHeight,outputWidth];var program=new DepthToSpaceProgram(outputShape,blockSize,dataFormat);return backend.runWebGLProgram(program,[x],x.dtype)}var depthToSpaceConfig={kernelName:tf.DepthToSpace,backendName:"webgl",kernelFunc:depthToSpace};var DepthwiseConv2DProgram=function(){function DepthwiseConv2DProgram(convInfo,addBias,activation,hasPreluActivation,hasLeakyReluAlpha){if(addBias===void 0){addBias=false}if(activation===void 0){activation=null}if(hasPreluActivation===void 0){hasPreluActivation=false}if(hasLeakyReluAlpha===void 0){hasLeakyReluAlpha=false}this.variableNames=["x","W"];this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}];this.outputShape=convInfo.outShape;this.enableShapeUniforms=useShapeUniforms(this.outputShape.length);var filterHeight=convInfo.filterHeight;var filterWidth=convInfo.filterWidth;var channelMul=convInfo.outChannels/convInfo.inChannels;var activationSnippet="",applyActivationSnippet="";if(activation){if(hasPreluActivation){activationSnippet="float activation(float a) {\n          float b = getPreluActivationWeightsAtOutCoords();\n          "+activation+"\n        }"}else if(hasLeakyReluAlpha){activationSnippet="float activation(float a) {\n          float b = getLeakyreluAlphaAtOutCoords();\n          "+activation+"\n        }"}else{activationSnippet="\n          float activation(float x) {\n            "+activation+"\n          }\n        "}applyActivationSnippet="result = activation(result);"}var addBiasSnippet=addBias?"result += getBiasAtOutCoords();":"";if(addBias){this.variableNames.push("bias")}if(hasPreluActivation){this.variableNames.push("preluActivationWeights")}if(hasLeakyReluAlpha){this.variableNames.push("leakyreluAlpha")}this.userCode="\n      "+activationSnippet+"\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords.x;\n        ivec2 xRCCorner = coords.yz * strides - pads;\n        int d2 = coords.w;\n        int d1 = d2 / "+channelMul+";\n        int q = d2 - d1 * "+channelMul+";\n\n        int xRCorner = xRCCorner.x;\n        int xCCorner = xRCCorner.y;\n\n        // Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n        // TO DO(dsmilkov): Flatten the two for loops and vec4 the operations.\n        for (int wR = 0; wR < "+filterHeight+"; wR++) {\n          int xR = xRCorner + wR * dilations[0];\n\n          if (xR < 0 || xR >= inDims[0]) {\n            continue;\n          }\n\n          for (int wC = 0; wC < "+filterWidth+"; wC++) {\n            int xC = xCCorner + wC * dilations[1];\n\n            if (xC < 0 || xC >= inDims[1]) {\n              continue;\n            }\n\n            float xVal = getX(batch, xR, xC, d1);\n            float wVal = getW(wR, wC, d1, q);\n            dotProd += xVal * wVal;\n          }\n        }\n\n        float result = dotProd;\n        "+addBiasSnippet+"\n        "+applyActivationSnippet+"\n        setOutput(result);\n      }\n    "}return DepthwiseConv2DProgram}();var DepthwiseConvPacked2DProgram=function(){function DepthwiseConvPacked2DProgram(convInfo,addBias,activation,hasPreluActivation,hasLeakyReluAlpha){if(addBias===void 0){addBias=false}if(activation===void 0){activation=null}if(hasPreluActivation===void 0){hasPreluActivation=false}if(hasLeakyReluAlpha===void 0){hasLeakyReluAlpha=false}this.variableNames=["x","W"];this.packedInputs=true;this.packedOutput=true;this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}];this.outputShape=convInfo.outShape;this.enableShapeUniforms=useShapeUniforms(this.outputShape.length);var channelMul=convInfo.outChannels/convInfo.inChannels;var padLeft=convInfo.padInfo.left;var strideWidth=convInfo.strideWidth;var dilationWidth=convInfo.dilationWidth;var filterHeight=convInfo.filterHeight;var filterWidth=convInfo.filterWidth;var texelsAcross=filterWidth;var mainLoop="\n      int xR; int xC; int xCOffset;\n      vec4 wTexel; vec4 previous; vec4 final;";for(var c=0;c<filterWidth;c++){mainLoop+="\n          vec4 xTexelC"+c*2+";\n          int xTexelC"+c*2+"Ready;\n          vec4 xTexelC"+(c*2+1)+";\n          int xTexelC"+(c*2+1)+"Ready;\n          vec4 xC"+c+";"}mainLoop+="\n    for (int r = 0; r < "+filterHeight+"; r++) {\n      ";for(var c=0;c<filterWidth;c++){mainLoop+="\n          xTexelC"+c*2+" = vec4(0.0);\n          xTexelC"+c*2+"Ready = 0;\n          xTexelC"+(c*2+1)+" = vec4(0.0);\n          xTexelC"+(c*2+1)+"Ready = 0;\n          xC"+c+" = vec4(0.0);"}mainLoop+="\n        xR = xRCorner + r * dilations[0];\n        if (xR >=0 && xR < inDims[0]) {\n      ";for(var texelC=0;texelC<(texelsAcross+1)/2;texelC++){var colIndex=texelC*2;mainLoop+="\n          xC = xCCorner + "+colIndex*dilationWidth+";\n          ";if(strideWidth===1){if(colIndex<filterWidth){if(padLeft%2===1){mainLoop+="\n                xCOffset = xC + 1;\n                if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC"+colIndex+"Ready == 0) {\n                  xTexelC"+colIndex+" = getX(batch, xR, xCOffset, d1);\n\n                  // Need to manually clear unused channels in case\n                  // we're reading from recycled texture.\n                  if (xCOffset + 1 >= inDims[1]) {\n                    xTexelC"+colIndex+".zw = vec2(0.0);\n                  }\n                  xTexelC"+colIndex+"Ready = 1;\n                }\n              ";if(dilationWidth===1&&colIndex>0){mainLoop+="\n                xC"+colIndex+" = vec4(xTexelC"+(colIndex-2)+".zw, xTexelC"+colIndex+".xy);\n                "}else{mainLoop+="\n                  xCOffset = xC + 1 - 2;\n\n                  if (xCOffset >= 0 && xCOffset < inDims[1]) {\n                    previous = getX(batch, xR, xCOffset, d1);\n\n                    // Need to manually clear unused channels in case\n                    // we're reading from recycled texture.\n                    if (xCOffset + 1 >= inDims[1]) {\n                      previous.zw = vec2(0.0);\n                    }\n\n                    xC"+colIndex+" = vec4(previous.zw, xTexelC"+colIndex+".xy);\n                  } else {\n                    xC"+colIndex+" = vec4(0.0, 0.0, xTexelC"+colIndex+".xy);\n                  }\n                  "}}else{mainLoop+="\n                if (xC >= 0 && xC < inDims[1] && xTexelC"+colIndex+"Ready == 0) {\n                  xTexelC"+colIndex+" = getX(batch, xR, xC, d1);\n                  if (xC + 1 >= inDims[1]) {\n                    xTexelC"+colIndex+".zw = vec2(0.0);\n                  }\n                  xTexelC"+colIndex+"Ready = 1;\n                }\n\n                xC"+colIndex+" = xTexelC"+colIndex+";\n                "}if(colIndex+1<filterWidth){var nextTexelOffset=padLeft%2===0?tf.util.nearestLargerEven(dilationWidth):dilationWidth;if(dilationWidth%2===0&&padLeft%2===1||dilationWidth%2!==0&&padLeft%2!==1){mainLoop+="\n                  xCOffset = xC + imod(pads[1], 2) + "+nextTexelOffset+";\n\n                  if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC"+(colIndex+1)+"Ready == 0) {\n                    xTexelC"+(colIndex+1)+" = getX(batch, xR, xCOffset, d1);\n\n                    // Need to manually clear unused channels in case\n                    // we're reading from recycled texture.\n                    if (xCOffset + 1 >= inDims[1]) {\n                      xTexelC"+(colIndex+1)+".zw = vec2(0.0);\n                    }\n                    xTexelC"+(colIndex+1)+"Ready = 1;\n                  }\n                  ";if(dilationWidth>1){mainLoop+="\n                    xCOffset -= 2;\n                    if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC"+colIndex+"Ready == 0) {\n                      xTexelC"+colIndex+" = getX(batch, xR, xCOffset, d1);\n                      xTexelC"+colIndex+"Ready = 1;\n                    }\n                    "}mainLoop+="\n                  xC"+(colIndex+1)+" = vec4(xTexelC"+colIndex+".zw, xTexelC"+(colIndex+1)+".xy);\n                  "}else{if(nextTexelOffset===1){mainLoop+="\n                    xC"+(colIndex+1)+" = xTexelC"+colIndex+";\n                    "}else{mainLoop+="\n                    xCOffset = xC + "+nextTexelOffset+";\n\n                    if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC"+(colIndex+1)+"Ready == 0) {\n                      xTexelC"+(colIndex+1)+" = getX(batch, xR, xCOffset, d1);\n                      if (xCOffset + 1 >= inDims[1]) {\n                        xTexelC"+(colIndex+1)+".zw = vec2(0.0);\n                      }\n                      xTexelC"+(colIndex+1)+"Ready = 1;\n                    }\n\n                    xC"+(colIndex+1)+" = xTexelC"+(colIndex+1)+";\n                    "}}}}}else{if(colIndex<filterWidth){if(padLeft%2===1){mainLoop+="\n                xCOffset = xC + 1 - strides[1];\n                if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC"+colIndex+"Ready == 0) {\n                  xTexelC"+colIndex+" = getX(batch, xR, xCOffset, d1);\n                  // Need to manually clear unused channels in case\n                  // we're reading from recycled texture.\n                  if (xCOffset + 1 >= inDims[1]) {\n                    xTexelC"+colIndex+".zw = vec2(0.0);\n                  }\n                  xTexelC"+colIndex+"Ready = 1;\n                }\n\n                if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC"+(colIndex+1)+"Ready == 0) {\n                  xTexelC"+(colIndex+1)+" = getX(batch, xR, xC + 1, d1);\n                  // Need to manually clear unused channels in case\n                  // we're reading from recycled texture.\n                  if (xC + 2 >= inDims[1]) {\n                    xTexelC"+(colIndex+1)+".zw = vec2(0.0);\n                  }\n                  xTexelC"+(colIndex+1)+"Ready = 1;\n                }\n\n                xC"+colIndex+" = vec4(xTexelC"+colIndex+".zw, xTexelC"+(colIndex+1)+".zw);\n              ";if(colIndex+1<filterWidth){mainLoop+="\n                  final = vec4(0.0);\n                  xCOffset = xC + 1 + strides[1];\n                  if(xCOffset >= 0 && xCOffset < inDims[1]) {\n                    final = getX(batch, xR, xCOffset, d1);\n                  }\n                  xC"+(colIndex+1)+" = vec4(xTexelC"+(colIndex+1)+".xy, final.xy);\n                "}}else{mainLoop+="\n                if(xC >= 0 && xC < inDims[1] && xTexelC"+colIndex+"Ready == 0) {\n                  xTexelC"+colIndex+" = getX(batch, xR, xC, d1);\n                  if (xC + 1 >= inDims[1]) {\n                    xTexelC"+colIndex+".zw = vec2(0.0);\n                  }\n                  xTexelC"+colIndex+"Ready = 1;\n                }\n\n                xCOffset = xC + strides[1];\n                if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC"+(colIndex+1)+"Ready == 0) {\n                  xTexelC"+(colIndex+1)+" = getX(batch, xR, xCOffset, d1);\n                  if (xCOffset + 1 >= inDims[1]) {\n                    xTexelC"+(colIndex+1)+".zw = vec2(0.);\n                  }\n                  xTexelC"+(colIndex+1)+"Ready = 1;\n                }\n\n                xC"+colIndex+" = vec4(\n                  xTexelC"+colIndex+".xy, xTexelC"+(colIndex+1)+".xy);\n              ";if(colIndex+1<filterWidth){mainLoop+="\n                  xC"+(colIndex+1)+" = vec4(xTexelC"+colIndex+".zw, xTexelC"+(colIndex+1)+".zw);\n                "}}}}if(colIndex<filterWidth){mainLoop+="\n            wTexel = getW(r, "+colIndex+", d1, q);\n            dotProd += xC"+colIndex+" * vec4(wTexel.xz, wTexel.xz);\n          ";if(colIndex+1<filterWidth){mainLoop+="\n              wTexel = getW(r, "+(colIndex+1)+", d1, q);\n              dotProd += xC"+(colIndex+1)+" * vec4(wTexel.xz, wTexel.xz);\n            "}}}mainLoop+="\n    }\n  ";mainLoop+="\n      }\n    ";var activationSnippet="",applyActivationSnippet="";if(activation){if(hasPreluActivation){activationSnippet="vec4 activation(vec4 a) {\n          vec4 b = getPreluActivationWeightsAtOutCoords();\n          "+activation+"\n        }"}else if(hasLeakyReluAlpha){activationSnippet="vec4 activation(vec4 a) {\n          vec4 b = getLeakyreluAlphaAtOutCoords();\n          "+activation+"\n        }"}else{activationSnippet="vec4 activation(vec4 x) {\n          "+activation+"\n        }"}applyActivationSnippet="result = activation(result);"}var addBiasSnippet=addBias?"result += getBiasAtOutCoords();":"";if(addBias){this.variableNames.push("bias")}if(hasPreluActivation){this.variableNames.push("preluActivationWeights")}if(hasLeakyReluAlpha){this.variableNames.push("leakyreluAlpha")}this.userCode="\n      "+activationSnippet+"\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords.x;\n        ivec2 xRCCorner = coords.yz * strides - pads;\n        int d2 = coords.w;\n        int d1 = d2 / "+channelMul+";\n        int q = d2 - d1 * "+channelMul+";\n        int xRCorner = xRCCorner.x;\n        int xCCorner = xRCCorner.y;\n\n        //intialize dotProd with a small epsilon seems to reduce GPU accuracy loss.\n        vec4 dotProd = vec4(0.000000000000001);\n\n        "+mainLoop+"\n\n        vec4 result = dotProd - vec4(0.000000000000001);\n        "+addBiasSnippet+"\n        "+applyActivationSnippet+"\n        setOutput(result);\n      }\n    "}return DepthwiseConvPacked2DProgram}();function depthwiseConv2dNative(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,filter=inputs.filter;var strides=attrs.strides,pad=attrs.pad,dilations=attrs.dilations,dimRoundingMode=attrs.dimRoundingMode;var $dilations=dilations;if($dilations==null){$dilations=[1,1]}tf.util.assert(tf.backend_util.eitherStridesOrDilationsAreOne(strides,$dilations),function(){return"Error in depthwiseConv2d: Either strides or dilations must be "+("1. Got strides "+strides+" and dilations '"+$dilations+"'")});var convInfo=tf.backend_util.computeConv2DInfo(x.shape,filter.shape,strides,$dilations,pad,dimRoundingMode,true);var program;if(tf.env().getBool("WEBGL_PACK_DEPTHWISECONV")&&convInfo.strideWidth<=2&&convInfo.outChannels/convInfo.inChannels===1){program=new DepthwiseConvPacked2DProgram(convInfo)}else{program=new DepthwiseConv2DProgram(convInfo)}var customValues=[[convInfo.padInfo.top,convInfo.padInfo.left],[convInfo.strideHeight,convInfo.strideWidth],[convInfo.dilationHeight,convInfo.dilationWidth],[convInfo.inHeight,convInfo.inWidth]];return backend.runWebGLProgram(program,[x,filter],"float32",customValues)}var depthwiseConv2dNativeConfig={kernelName:tf.DepthwiseConv2dNative,backendName:"webgl",kernelFunc:depthwiseConv2dNative};var DepthwiseConv2DDerFilterProgram=function(){function DepthwiseConv2DDerFilterProgram(convInfo){this.variableNames=["x","dy"];this.outputShape=convInfo.filterShape;var strideHeight=convInfo.strideHeight;var strideWidth=convInfo.strideWidth;var padTop=convInfo.padInfo.top;var padLeft=convInfo.padInfo.left;var channelMul=convInfo.outChannels/convInfo.inChannels;this.userCode="\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int wR = coords.x;\n        int wC = coords.y;\n        int d1 = coords.z;\n        int dm = coords.w;\n        int d2 = d1 * "+channelMul+" + dm;\n\n        float dotProd = 0.0;\n\n        // TO DO: Vec4 over the batch size\n        for (int b = 0; b < "+convInfo.batchSize+"; b++) {\n          for (int yR = 0; yR < "+convInfo.outHeight+"; yR++) {\n            int xR = wR + yR * "+strideHeight+" - "+padTop+";\n\n            if (xR < 0 || xR >= "+convInfo.inHeight+") {\n              continue;\n            }\n\n            for (int yC = 0; yC < "+convInfo.outWidth+"; yC++) {\n              int xC = wC + yC * "+strideWidth+" - "+padLeft+";\n\n              if (xC < 0 || xC >= "+convInfo.inWidth+") {\n                continue;\n              }\n\n              float dyValue = getDy(b, yR, yC, d2);\n              float xValue = getX(b, xR, xC, d1);\n              dotProd += (xValue * dyValue);\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    "}return DepthwiseConv2DDerFilterProgram}();var DepthwiseConv2DDerInputProgram=function(){function DepthwiseConv2DDerInputProgram(convInfo){this.variableNames=["dy","W"];this.outputShape=convInfo.inShape;var filterHeight=convInfo.filterHeight;var filterWidth=convInfo.filterWidth;var strideHeight=convInfo.strideHeight;var strideWidth=convInfo.strideWidth;var padTop=filterHeight-1-convInfo.padInfo.top;var padLeft=filterWidth-1-convInfo.padInfo.left;var channelMul=convInfo.outChannels/convInfo.inChannels;this.userCode="\n      const ivec2 pads = ivec2("+padTop+", "+padLeft+");\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords[0];\n        int d1 = coords[3];\n        ivec2 dyCorner = coords.yz - pads;\n        int dyRCorner = dyCorner.x;\n        int dyCCorner = dyCorner.y;\n\n        float dotProd = 0.0;\n\n        for (int wR = 0; wR < "+filterHeight+"; wR++) {\n          float dyR = float(dyRCorner + wR) / "+strideHeight+".0;\n\n          if (dyR < 0.0 || dyR >= "+convInfo.outHeight+".0 || fract(dyR) > 0.0) {\n            continue;\n          }\n          int idyR = int(dyR);\n\n          int wRPerm = "+filterHeight+" - 1 - wR;\n\n          for (int wC = 0; wC < "+filterWidth+"; wC++) {\n            float dyC = float(dyCCorner + wC) / "+strideWidth+".0;\n\n            if (dyC < 0.0 || dyC >= "+convInfo.outWidth+".0 ||\n                fract(dyC) > 0.0) {\n              continue;\n            }\n            int idyC = int(dyC);\n\n            int wCPerm = "+filterWidth+" - 1 - wC;\n\n            // TO DO: Vec4 over the channelMul\n            for (int dm = 0; dm < "+channelMul+"; dm++) {\n              int d2 = d1 * "+channelMul+" + dm;\n              float xValue = getDy(batch, idyR, idyC, d2);\n              float wValue = getW(wRPerm, wCPerm, d1, dm);\n              dotProd += xValue * wValue;\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    "}return DepthwiseConv2DDerInputProgram}();function depthwiseConv2dNativeBackpropFilter(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,dy=inputs.dy;var strides=attrs.strides,dilations=attrs.dilations,pad=attrs.pad,dimRoundingMode=attrs.dimRoundingMode,filterShape=attrs.filterShape;var convInfo=tf.backend_util.computeConv2DInfo(x.shape,filterShape,strides,dilations,pad,dimRoundingMode,true);var program=new DepthwiseConv2DDerFilterProgram(convInfo);return backend.runWebGLProgram(program,[x,dy],"float32")}var depthwiseConv2dNativeBackpropFilterConfig={kernelName:tf.DepthwiseConv2dNativeBackpropFilter,backendName:"webgl",kernelFunc:depthwiseConv2dNativeBackpropFilter};function depthwiseConv2dNativeBackpropInput(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var dy=inputs.dy,filter=inputs.filter;var strides=attrs.strides,dilations=attrs.dilations,pad=attrs.pad,dimRoundingMode=attrs.dimRoundingMode,inputShape=attrs.inputShape;var convInfo=tf.backend_util.computeConv2DInfo(inputShape,filter.shape,strides,dilations,pad,dimRoundingMode,true);var program=new DepthwiseConv2DDerInputProgram(convInfo);return backend.runWebGLProgram(program,[dy,filter],"float32")}var depthwiseConv2dNativeBackpropInputConfig={kernelName:tf.DepthwiseConv2dNativeBackpropInput,backendName:"webgl",kernelFunc:depthwiseConv2dNativeBackpropInput};var DiagProgram=function(){function DiagProgram(size){this.variableNames=["X"];this.outputShape=[size,size];this.userCode="\n      void main() {\n          ivec2 coords = getOutputCoords();\n          float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0;\n          setOutput(val);\n      }\n    "}return DiagProgram}();function diag(args){var inputs=args.inputs,backend=args.backend;var x=inputs.x;var outShape=__spread(x.shape,x.shape);var xSize=tf.util.sizeFromShape(x.shape);var flat=reshape({inputs:{x:x},backend:backend,attrs:{shape:[xSize]}});var program=new DiagProgram(xSize);var res=backend.runWebGLProgram(program,[flat],flat.dtype);var out=reshape({inputs:{x:res},backend:backend,attrs:{shape:outShape}});backend.disposeIntermediateTensorInfo(flat);backend.disposeIntermediateTensorInfo(res);return out}var diagConfig={kernelName:tf.Diag,backendName:"webgl",kernelFunc:diag};var Dilation2DProgram=function(){function Dilation2DProgram(convInfo){this.variableNames=["x","W"];this.outputShape=convInfo.outShape;var inHeight=convInfo.inHeight,inWidth=convInfo.inWidth,padInfo=convInfo.padInfo,strideHeight=convInfo.strideHeight,strideWidth=convInfo.strideWidth,filterHeight=convInfo.filterHeight,filterWidth=convInfo.filterWidth,dilationHeight=convInfo.dilationHeight,dilationWidth=convInfo.dilationWidth;var padTop=padInfo.top,padLeft=padInfo.left;this.userCode="\n      const ivec2 strides = ivec2("+strideHeight+", "+strideWidth+");\n      const ivec2 pads = ivec2("+padTop+", "+padLeft+");\n      const float neg_infinity = -3.4e38;\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords.x;\n        int d1 = coords.w;\n        ivec2 outTopLeftCorner =\n            coords.yz * strides - pads;\n        int hBeg = outTopLeftCorner.x;\n        int wBeg = outTopLeftCorner.y;\n\n        float curVal = neg_infinity;\n        for (int h = 0; h < "+filterHeight+"; h++) {\n          int hIn = hBeg + h * "+dilationHeight+";\n\n          if (hIn >= 0 && hIn < "+inHeight+") {\n            for (int w = 0; w < "+filterWidth+"; w++) {\n              int wIn = wBeg + w * "+dilationWidth+";\n\n              if (wIn >= 0 && wIn < "+inWidth+") {\n                float xVal = getX(batch, hIn, wIn, d1);\n                float wVal = getW(h, w, d1);\n\n                float val = xVal + wVal;\n                if (val > curVal) {\n                  curVal = val;\n                }\n              }\n            }\n          }\n        }\n\n        float result = curVal;\n        setOutput(result);\n      }\n    "}return Dilation2DProgram}();function dilation2D(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,filter=inputs.filter;var strides=attrs.strides,pad=attrs.pad,dilations=attrs.dilations;var convInfo=tf.backend_util.computeDilation2DInfo(x.shape,filter.shape,strides,pad,"NHWC",dilations);var out;var program=new Dilation2DProgram(convInfo);out=backend.runWebGLProgram(program,[x,filter],"float32");var outReshaped=reshape({inputs:{x:out},backend:backend,attrs:{shape:convInfo.outShape}});backend.disposeIntermediateTensorInfo(out);return outReshaped}var dilation2DConfig={kernelName:tf.Dilation2D,backendName:"webgl",kernelFunc:dilation2D};function einsum(args){var e_1,_a,e_2,_b;var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var equation=attrs.equation;var tensors=inputs;var _c=tf.backend_util.decodeEinsumEquation(equation,tensors.length),allDims=_c.allDims,summedDims=_c.summedDims,idDims=_c.idDims;tf.backend_util.checkEinsumDimSizes(allDims.length,idDims,tensors);var _d=tf.backend_util.getEinsumComputePath(summedDims,idDims),path=_d.path,steps=_d.steps;var nSteps=steps.length;var out=null;var numDimsRemaining=allDims.length;var tensorsToDispose=[];for(var i=0;i<nSteps;++i){try{for(var _e=(e_1=void 0,__values(steps[i])),_f=_e.next();!_f.done;_f=_e.next()){var idTerm=_f.value;var _g=tf.backend_util.getEinsumPermutation(numDimsRemaining,idDims[idTerm]),perm=_g.permutationIndices,dimsToExpand=_g.expandDims;var x=void 0;if(tf.backend_util.isIdentityPermutation(perm)){x=tensors[idTerm]}else{x=transpose({inputs:{x:tensors[idTerm]},backend:backend,attrs:{perm:perm}});tensorsToDispose.push(x)}var targetShape=x.shape.slice();for(var k=0;k<dimsToExpand.length;++k){targetShape.splice(dimsToExpand[k],0,1)}if(!tf.util.arraysEqual(x.shape,targetShape)){x=reshape({inputs:{x:x},backend:backend,attrs:{shape:targetShape}});tensorsToDispose.push(x)}if(out===null){out=x}else{out=multiply({inputs:{a:x,b:out},backend:backend});tensorsToDispose.push(out)}}}catch(e_1_1){e_1={error:e_1_1}}finally{try{if(_f&&!_f.done&&(_a=_e.return))_a.call(_e)}finally{if(e_1)throw e_1.error}}if(i<nSteps-1){if(path[i]>=0){out=sum({inputs:{x:out},backend:backend,attrs:{axis:path[i]-(allDims.length-numDimsRemaining),keepDims:false}});tensorsToDispose.push(out)}numDimsRemaining--}}try{for(var tensorsToDispose_1=__values(tensorsToDispose),tensorsToDispose_1_1=tensorsToDispose_1.next();!tensorsToDispose_1_1.done;tensorsToDispose_1_1=tensorsToDispose_1.next()){var tensorInfo=tensorsToDispose_1_1.value;if(tensorInfo===out){continue}backend.disposeIntermediateTensorInfo(tensorInfo)}}catch(e_2_1){e_2={error:e_2_1}}finally{try{if(tensorsToDispose_1_1&&!tensorsToDispose_1_1.done&&(_b=tensorsToDispose_1.return))_b.call(tensorsToDispose_1)}finally{if(e_2)throw e_2.error}}return out}var einsumConfig={kernelName:tf.Einsum,backendName:"webgl",kernelFunc:einsum};var ELU="return (x >= 0.0) ? x : (exp(x) - 1.0);";var ELU_PACKED="\n  vec4 result;\n\n  result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);\n  result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);\n  result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);\n  result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);\n\n  return result;\n";var elu=unaryKernelFunc({opSnippet:ELU,packedOpSnippet:ELU_PACKED});var eluConfig={kernelName:tf.Elu,backendName:"webgl",kernelFunc:elu};var ELU_DER="return (b >= 1.0) ? a : a * (b + 1.0);";var ELU_DER_PACKED="\n  vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));\n  return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\n";var eluGrad=function(args){var inputs=args.inputs,backend=args.backend;var dy=inputs.dy,y=inputs.y;var program=tf.env().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new BinaryOpPackedProgram(ELU_DER_PACKED,dy.shape,y.shape):new BinaryOpProgram(ELU_DER,dy.shape,y.shape);return backend.runWebGLProgram(program,[dy,y],dy.dtype)};var eluGradConfig={kernelName:tf.EluGrad,backendName:"webgl",kernelFunc:eluGrad};var PACKED_EQUAL="\n  return vec4(equal(a, b));\n";var EQUAL="return float(a == b);";var equal=binaryKernelFunc({opSnippet:EQUAL,packedOpSnippet:PACKED_EQUAL,dtype:"bool",cpuKernelImpl:equalImplCPU});var equalConfig={kernelName:tf.Equal,backendName:"webgl",kernelFunc:equal};var ERF='\n  // Error function is calculated approximately with elementary function.\n  // See "Handbook of Mathematical Functions with Formulas,\n  // Graphs, and Mathematical Tables", Abramowitz and Stegun.\n  float p = '+tf.backend_util.ERF_P+";\n  float a1 = "+tf.backend_util.ERF_A1+";\n  float a2 = "+tf.backend_util.ERF_A2+";\n  float a3 = "+tf.backend_util.ERF_A3+";\n  float a4 = "+tf.backend_util.ERF_A4+";\n  float a5 = "+tf.backend_util.ERF_A5+";\n\n  float sign = sign(x);\n  x = abs(x);\n  float t = 1.0 / (1.0 + p * x);\n  return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x));\n";var erf=unaryKernelFunc({opSnippet:ERF});var erfConfig={kernelName:tf.Erf,backendName:"webgl",kernelFunc:erf};var EXP="return exp(x);";var exp=unaryKernelFunc({opSnippet:EXP,packedOpSnippet:EXP,cpuKernelImpl:expImplCPU,dtype:"float32"});var expConfig={kernelName:tf.Exp,backendName:"webgl",kernelFunc:exp};function expandDims(args){var inputs=args.inputs,attrs=args.attrs,backend=args.backend;var dim=attrs.dim;var input=inputs.input;var inputRank=input.shape.length;var newShape=input.shape.slice();var $dim=dim;if(dim<0){tf.util.assert(-(inputRank+1)<=dim,function(){return"Axis must be in the interval ["+-(inputRank+1)+", "+inputRank+"]"});$dim=inputRank+dim+1}newShape.splice($dim,0,1);return reshape({inputs:{x:input},backend:backend,attrs:{shape:newShape}})}var expandDimsConfig={kernelName:tf.ExpandDims,backendName:"webgl",kernelFunc:expandDims};var EXPM1="return exp(x) - 1.0;";var expm1=unaryKernelFunc({opSnippet:EXPM1,packedOpSnippet:EXPM1,cpuKernelImpl:expm1ImplCPU});var expm1Config={kernelName:tf.Expm1,backendName:"webgl",kernelFunc:expm1};var FFTProgram=function(){function FFTProgram(component,inputShape,inverse){this.variableNames=["real","imag"];var innerDim=inputShape[1];this.outputShape=inputShape;var exponentMultiplierSnippet=inverse?"2.0 * "+Math.PI:"-2.0 * "+Math.PI;var resultDenominator=inverse?innerDim+".0":"1.0";var opString;if(component==="real"){opString="return real * expR - imag * expI;"}else if(component==="imag"){opString="return real * expI + imag * expR;"}else{throw new Error('FFT component must be either "real" or "imag", got '+component+".")}this.userCode="\n      const float exponentMultiplier = "+exponentMultiplierSnippet+";\n\n      float unaryOpComplex(float real, float expR, float imag, float expI) {\n        "+opString+"\n      }\n\n      float mulMatDFT(int batch, int index) {\n        float indexRatio = float(index) / float("+innerDim+");\n        float exponentMultiplierTimesIndexRatio =\n            exponentMultiplier * indexRatio;\n\n        float result = 0.0;\n\n        for (int i = 0; i < "+innerDim+"; i++) {\n          // x = (-2|2 * PI / N) * index * i;\n          float x = exponentMultiplierTimesIndexRatio * float(i);\n          float expR = cos(x);\n          float expI = sin(x);\n          float real = getReal(batch, i);\n          float imag = getImag(batch, i);\n\n          result +=\n              unaryOpComplex(real, expR, imag, expI) / "+resultDenominator+";\n        }\n\n        return result;\n      }\n\n      void main() {\n        ivec2 coords = getOutputCoords();\n        setOutput(mulMatDFT(coords[0], coords[1]));\n      }\n    "}return FFTProgram}();function fftImpl(x,inverse,backend){var xData=backend.texData.get(x.dataId);var inputSize=tf.util.sizeFromShape(x.shape);var innerDimensionSize=x.shape[x.shape.length-1];var batch=inputSize/innerDimensionSize;var input2D=reshape({inputs:{x:x},backend:backend,attrs:{shape:[batch,innerDimensionSize]}});var xShape=input2D.shape;var realProgram=new FFTProgram("real",xShape,inverse);var imagProgram=new FFTProgram("imag",xShape,inverse);var inputs=[{dataId:xData.complexTensorInfos.real.dataId,dtype:xData.complexTensorInfos.real.dtype,shape:xShape},{dataId:xData.complexTensorInfos.imag.dataId,dtype:xData.complexTensorInfos.imag.dtype,shape:xShape}];var realPart=backend.runWebGLProgram(realProgram,inputs,"float32");var imagPart=backend.runWebGLProgram(imagProgram,inputs,"float32");var complexOutput=complex({inputs:{real:realPart,imag:imagPart},backend:backend});backend.disposeIntermediateTensorInfo(realPart);backend.disposeIntermediateTensorInfo(imagPart);var complexOutputReshaped=reshape({inputs:{x:complexOutput},backend:backend,attrs:{shape:x.shape}});backend.disposeIntermediateTensorInfo(input2D);backend.disposeIntermediateTensorInfo(complexOutput);return complexOutputReshaped}function fft(args){var inputs=args.inputs,backend=args.backend;var input=inputs.input;return fftImpl(input,false,backend)}var fftConfig={kernelName:tf.FFT,backendName:"webgl",kernelFunc:fft};var FillProgram=function(){function FillProgram(shape,value){this.outputShape=[];this.customUniforms=[{name:"value",type:"float"}];this.variableNames=["x"];this.outputShape=shape;this.userCode="\n      void main() {\n        // Input can be obtained from uniform value.\n        setOutput(value);\n      }\n    "}return FillProgram}();function fill(args){var backend=args.backend,attrs=args.attrs;var shape=attrs.shape,value=attrs.value;var dtype=attrs.dtype;dtype=dtype||tf.util.inferDtype(value);if(dtype==="string"){var values=tf.util.getArrayFromDType(dtype,tf.util.sizeFromShape(shape));values.fill(value);return backend.makeTensorInfo(shape,dtype,values)}else{var program=new FillProgram(shape,value);var customValues=[[value]];return backend.runWebGLProgram(program,[],dtype,customValues)}}var fillConfig={kernelName:tf.Fill,backendName:"webgl",kernelFunc:fill};var FlipLeftRightProgram=function(){function FlipLeftRightProgram(imageShape){this.variableNames=["Image"];this.outputShape=[];var imageWidth=imageShape[2];this.outputShape=imageShape;this.userCode="\n        void main() {\n          ivec4 coords = getOutputCoords();\n          int x = coords[2];\n\n          int coordX = "+imageWidth+" - x - 1;\n          float outputValue;\n          if(coordX >= 0 && coordX < "+imageWidth+") {\n            outputValue = getImage(coords[0], coords[1], coordX, coords[3]);\n          } else {\n            outputValue = getImage(coords[0], coords[1], coords[2], coords[3]);\n          }\n          setOutput(outputValue);\n        }\n    "}return FlipLeftRightProgram}();var flipLeftRightConfig={kernelName:tf.FlipLeftRight,backendName:"webgl",kernelFunc:function(_a){var inputs=_a.inputs,backend=_a.backend;var image=inputs.image;var webglBackend=backend;var program=new FlipLeftRightProgram(image.shape);var output=webglBackend.runWebGLProgram(program,[image],image.dtype);return output}};var FLOOR="return floor(x);";var floor=unaryKernelFunc({opSnippet:FLOOR,packedOpSnippet:FLOOR,cpuKernelImpl:floorImplCPU});var floorConfig={kernelName:tf.Floor,backendName:"webgl",kernelFunc:floor};var INT_DIV="\n  float s = sign(a) * sign(b);\n  int ia = round(a);\n  int ib = round(b);\n  if (ib != 0) {\n    // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n    return float(idiv(ia, ib, s));\n  } else {\n    return NAN;\n  }\n";var INT_DIV_PACKED="\n  ivec4 ia = round(a);\n  ivec4 ib = round(b);\n  bvec4 cond = notEqual(ib, ivec4(0));\n  ivec4 result = ivec4(0);\n  vec4 s = sign(a) * sign(b);\n\n  // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n  if (cond[0]) {\n    result[0] = idiv(ia[0], ib[0], s[0]);\n  }\n  if (cond[1]) {\n    result[1] = idiv(ia[1], ib[1], s[1]);\n  }\n  if (cond[2]) {\n    result[2] = idiv(ia[2], ib[2], s[2]);\n  }\n  if (cond[3]) {\n    result[3] = idiv(ia[3], ib[3], s[3]);\n  }\n  return vec4(result);\n";var floorDiv=binaryKernelFunc({opSnippet:INT_DIV,packedOpSnippet:INT_DIV_PACKED,dtype:"int32"});var floorDivConfig={kernelName:tf.FloorDiv,backendName:"webgl",kernelFunc:floorDiv};var FromPixelsProgram=function(){function FromPixelsProgram(outputShape){this.variableNames=["A"];var glsl=getGlslDifferences();var _a=__read(outputShape,2),height=_a[0],width=_a[1];this.outputShape=outputShape;this.userCode="\n      void main() {\n        ivec3 coords = getOutputCoords();\n        int texR = coords[0];\n        int texC = coords[1];\n        int depth = coords[2];\n        vec2 uv = (vec2(texC, texR) + halfCR) / vec2("+width+".0, "+height+".0);\n\n        vec4 values = "+glsl.texture2D+"(A, uv);\n        float value;\n        if (depth == 0) {\n          value = values.r;\n        } else if (depth == 1) {\n          value = values.g;\n        } else if (depth == 2) {\n          value = values.b;\n        } else if (depth == 3) {\n          value = values.a;\n        }\n\n        setOutput(floor(value * 255.0 + 0.5));\n      }\n    "}return FromPixelsProgram}();var FromPixelsPackedProgram=function(){function FromPixelsPackedProgram(outputShape){this.variableNames=["A"];this.packedInputs=false;this.packedOutput=true;var glsl=getGlslDifferences();var _a=__read(outputShape,2),height=_a[0],width=_a[1];this.outputShape=outputShape;this.userCode="\n      void main() {\n        ivec3 coords = getOutputCoords();\n        int texR = coords[0];\n        int texC = coords[1];\n        int depth = coords[2];\n\n        vec4 result = vec4(0.);\n\n        for(int row=0; row<=1; row++) {\n          for(int col=0; col<=1; col++) {\n            texC = coords[1] + row;\n            depth = coords[2] + col;\n\n            vec2 uv = (vec2(texC, texR) + halfCR) /\n                       vec2("+width+".0, "+height+".0);\n            vec4 values = "+glsl.texture2D+"(A, uv);\n            float value;\n            if (depth == 0) {\n              value = values.r;\n            } else if (depth == 1) {\n              value = values.g;\n            } else if (depth == 2) {\n              value = values.b;\n            } else if (depth == 3) {\n              value = values.a;\n            }\n\n            result[row * 2 + col] = floor(value * 255.0 + 0.5);\n          }\n        }\n\n        "+glsl.output+" = result;\n      }\n    "}return FromPixelsPackedProgram}();var fromPixelsConfig={kernelName:tf.FromPixels,backendName:"webgl",kernelFunc:fromPixels};var fromPixels2DContext;function fromPixels(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var pixels=inputs.pixels;var numChannels=attrs.numChannels;var isVideo=typeof HTMLVideoElement!=="undefined"&&pixels instanceof HTMLVideoElement;var isImage=typeof HTMLImageElement!=="undefined"&&pixels instanceof HTMLImageElement;var _a=__read(isVideo?[pixels.videoWidth,pixels.videoHeight]:[pixels.width,pixels.height],2),width=_a[0],height=_a[1];var texShape=[height,width];var outShape=[height,width,numChannels];if(isImage||isVideo){if(fromPixels2DContext==null){fromPixels2DContext=document.createElement("canvas").getContext("2d")}fromPixels2DContext.canvas.width=width;fromPixels2DContext.canvas.height=height;fromPixels2DContext.drawImage(pixels,0,0,width,height);pixels=fromPixels2DContext.canvas}var tempPixelHandle=backend.makeTensorInfo(texShape,"int32");backend.texData.get(tempPixelHandle.dataId).usage=TextureUsage.PIXELS;backend.gpgpu.uploadPixelDataToTexture(backend.getTexture(tempPixelHandle.dataId),pixels);var program=tf.env().getBool("WEBGL_PACK")?new FromPixelsPackedProgram(outShape):new FromPixelsProgram(outShape);var res=backend.runWebGLProgram(program,[tempPixelHandle],"int32");backend.disposeData(tempPixelHandle.dataId);return res}function fusedConv2d(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,filter=inputs.filter,bias=inputs.bias,preluActivationWeights=inputs.preluActivationWeights;var strides=attrs.strides,pad=attrs.pad,dataFormat=attrs.dataFormat,dilations=attrs.dilations,dimRoundingMode=attrs.dimRoundingMode,activation=attrs.activation,leakyreluAlpha=attrs.leakyreluAlpha;var $dataFormat=tf.backend_util.convertConv2DDataFormat(dataFormat);var convInfo=tf.backend_util.computeConv2DInfo(x.shape,filter.shape,strides,dilations,pad,dimRoundingMode,false,$dataFormat);var out;var intermediates=[];if(convInfo.filterHeight===1&&convInfo.filterWidth===1&&convInfo.dilationHeight===1&&convInfo.dilationWidth===1&&convInfo.strideHeight===1&&convInfo.strideWidth===1&&(convInfo.padInfo.type==="SAME"||convInfo.padInfo.type==="VALID")){out=conv2dByMatMul({x:x,filter:filter,convInfo:convInfo,backend:backend,bias:bias,activation:activation,preluActivationWeights:preluActivationWeights,leakyreluAlpha:leakyreluAlpha})}else if(tf.env().getBool("WEBGL_CONV_IM2COL")&&x.shape[0]===1){out=conv2dWithIm2Row({x:x,filter:filter,convInfo:convInfo,backend:backend,bias:bias,activation:activation,preluActivationWeights:preluActivationWeights,leakyreluAlpha:leakyreluAlpha})}else{var hasBias=bias!=null;var hasPreluActivationWeights=preluActivationWeights!=null;var hasLeakyreluAlpha=activation==="leakyrelu";var fusedActivation=activation?mapActivationToShaderProgram(activation,false):null;var program=new Conv2DProgram(convInfo,hasBias,fusedActivation,hasPreluActivationWeights,hasLeakyreluAlpha);var inputs_1=[x,filter];if(bias){inputs_1.push(bias)}if(preluActivationWeights){inputs_1.push(preluActivationWeights)}if(hasLeakyreluAlpha){var $leakyreluAlpha=backend.makeTensorInfo([],"float32",tf.util.createScalarValue(leakyreluAlpha,"float32"));inputs_1.push($leakyreluAlpha);intermediates.push($leakyreluAlpha)}out=backend.runWebGLProgram(program,inputs_1,"float32")}var outReshaped=reshape({inputs:{x:out},backend:backend,attrs:{shape:convInfo.outShape}});intermediates.push(out);intermediates.forEach(function(t){return backend.disposeIntermediateTensorInfo(t)});return outReshaped}var fusedConv2DConfig={kernelName:tf.FusedConv2D,backendName:"webgl",kernelFunc:fusedConv2d};function fusedDepthwiseConv2D(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,filter=inputs.filter,bias=inputs.bias,preluActivationWeights=inputs.preluActivationWeights;var strides=attrs.strides,pad=attrs.pad,dilations=attrs.dilations,dimRoundingMode=attrs.dimRoundingMode,activation=attrs.activation,leakyreluAlpha=attrs.leakyreluAlpha;var intermediates=[];var $dilations=dilations;if($dilations==null){$dilations=[1,1]}tf.util.assert(tf.backend_util.eitherStridesOrDilationsAreOne(strides,$dilations),function(){return"Error in depthwiseConv2d: Either strides or dilations must be "+("1. Got strides "+strides+" and dilations '"+$dilations+"'")});var convInfo=tf.backend_util.computeConv2DInfo(x.shape,filter.shape,strides,$dilations,pad,dimRoundingMode,true);var shouldPackDepthwiseConv=tf.env().getBool("WEBGL_PACK_DEPTHWISECONV")&&convInfo.strideWidth<=2&&convInfo.outChannels/convInfo.inChannels===1;var fusedActivation=activation?mapActivationToShaderProgram(activation,shouldPackDepthwiseConv):null;var programInputs=[x,filter];var hasBias=bias!=null;var hasPreluActivationWeights=preluActivationWeights!=null;var hasLeakyreluAlpha=activation==="leakyrelu";if(hasBias){programInputs.push(bias)}if(hasPreluActivationWeights){programInputs.push(preluActivationWeights)}if(hasLeakyreluAlpha){var $leakyreluAlpha=backend.makeTensorInfo([],"float32",tf.util.createScalarValue(leakyreluAlpha,"float32"));programInputs.push($leakyreluAlpha);intermediates.push($leakyreluAlpha)}var program;if(shouldPackDepthwiseConv){program=new DepthwiseConvPacked2DProgram(convInfo,hasBias,fusedActivation,hasPreluActivationWeights,hasLeakyreluAlpha)}else{program=new DepthwiseConv2DProgram(convInfo,hasBias,fusedActivation,hasPreluActivationWeights,hasLeakyreluAlpha)}var customValues=[[convInfo.padInfo.top,convInfo.padInfo.left],[convInfo.strideHeight,convInfo.strideWidth],[convInfo.dilationHeight,convInfo.dilationWidth],[convInfo.inHeight,convInfo.inWidth]];var result=backend.runWebGLProgram(program,programInputs,"float32",customValues);intermediates.forEach(function(t){return backend.disposeIntermediateTensorInfo(t)});return result}var fusedDepthwiseConv2DConfig={kernelName:tf.FusedDepthwiseConv2D,backendName:"webgl",kernelFunc:fusedDepthwiseConv2D};var GatherNDProgram=function(){function GatherNDProgram(sliceDim,strides,shape){this.sliceDim=sliceDim;this.strides=strides;this.variableNames=["x","indices"];this.outputShape=shape;var stridesType=getCoordsDataType(strides.length);var dtype=getCoordsDataType(shape.length);var strideString=this.sliceDim>1?"strides[j]":"strides";this.userCode="\n        "+stridesType+" strides = "+stridesType+"("+this.strides+");\n         void main() {\n          "+dtype+" coords = getOutputCoords();\n          int flattenIndex = 0;\n          for (int j = 0; j < "+this.sliceDim+"; j++) {\n            int index = round(getIndices(coords[0], j));\n            flattenIndex += index * "+strideString+";\n          }\n          setOutput(getX(flattenIndex, coords[1]));\n        }\n      "}return GatherNDProgram}();function gatherNd(args){var inputs=args.inputs,backend=args.backend;var params=inputs.params,indices=inputs.indices;var indicesShape=indices.shape;var sliceRank=indicesShape[indicesShape.length-1];var paramsSize=tf.util.sizeFromShape(params.shape);var _a=__read(tf.backend_util.prepareAndValidate(params,indices),4),resultShape=_a[0],numSlices=_a[1],sliceSize=_a[2],strides=_a[3];var flattenIndices=reshape({inputs:{x:indices},backend:backend,attrs:{shape:[numSlices,sliceRank]}});var flattenX=reshape({inputs:{x:params},backend:backend,attrs:{shape:[tf.util.sizeFromShape(params.shape)/sliceSize,sliceSize]}});if(backend.shouldExecuteOnCPU([params,indices])||params.dtype==="string"){var indicesData=backend.readSync(indices.dataId);var paramsBuf=backend.bufferSync(params);var outValue=gatherNdImplCPU(indicesData,paramsBuf,params.dtype,numSlices,sliceRank,sliceSize,strides,params.shape,paramsSize);return backend.makeTensorInfo(resultShape,params.dtype,outValue.values)}var program=new GatherNDProgram(sliceRank,strides,[numSlices,sliceSize]);var res=backend.runWebGLProgram(program,[flattenX,flattenIndices],flattenX.dtype);var reshaped=reshape({inputs:{x:res},backend:backend,attrs:{shape:resultShape}});backend.disposeIntermediateTensorInfo(flattenIndices);backend.disposeIntermediateTensorInfo(flattenX);backend.disposeIntermediateTensorInfo(res);return reshaped}var gatherNdConfig={kernelName:tf.GatherNd,backendName:"webgl",kernelFunc:gatherNd};var GatherProgram=function(){function GatherProgram(aShape,outputShape){this.variableNames=["A","indices"];this.outputShape=outputShape;this.rank=outputShape.length;var dtype=getCoordsDataType(this.rank);var sourceCoords=getSourceCoords$1(aShape);this.userCode="\n      void main() {\n        "+dtype+" resRC = getOutputCoords();\n        setOutput(getA("+sourceCoords+"));\n      }\n    "}return GatherProgram}();function getSourceCoords$1(aShape,axis){var currentCoords=["resRC.x","resRC.y","resRC.z","resRC.w"];var sourceCoords=[];for(var i=0;i<aShape.length;i++){if(i===2){sourceCoords.push("int(getIndices(resRC.x, resRC.z))")}else{sourceCoords.push(""+currentCoords[i])}}return sourceCoords.join()}function gatherV2(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,indices=inputs.indices;var axis=attrs.axis,batchDims=attrs.batchDims;var parsedAxis=tf.util.parseAxisParam(axis,x.shape)[0];var indicesVals=backend.readSync(indices.dataId);var axisDim=x.shape[parsedAxis];var _loop_1=function(i){var index=indicesVals[i];tf.util.assert(index<=axisDim-1&&index>=0,function(){return"GatherV2: the index value "+index+" is not in [0, "+(axisDim-1)+"]"})};for(var i=0;i<indicesVals.length;++i){_loop_1(i)}var shapeInfo=tf.backend_util.segment_util.collectGatherOpShapeInfo(x,indices,parsedAxis,batchDims);var indicesSize=tf.util.sizeFromShape(indices.shape);var toDispose=[];var flattenX=reshape({inputs:{x:x},backend:backend,attrs:{shape:[shapeInfo.batchSize,shapeInfo.outerSize,shapeInfo.dimSize,shapeInfo.sliceSize]}});var flattenIndex=reshape({inputs:{x:indices},backend:backend,attrs:{shape:[shapeInfo.batchSize,indicesSize/shapeInfo.batchSize]}});toDispose.push(flattenX);toDispose.push(flattenIndex);var flattenOutputShape=[shapeInfo.batchSize,shapeInfo.outerSize,indicesSize/shapeInfo.batchSize,shapeInfo.sliceSize];if(backend.shouldExecuteOnCPU([x,indices])||x.dtype==="string"){var indicesBuf=backend.bufferSync(flattenIndex);var xBuf=backend.bufferSync(flattenX);var outBuf=gatherV2ImplCPU(xBuf,indicesBuf,flattenOutputShape);toDispose.forEach(function(t){return backend.disposeIntermediateTensorInfo(t)});return backend.makeTensorInfo(shapeInfo.outputShape,outBuf.dtype,outBuf.values)}var program=new GatherProgram(flattenX.shape,flattenOutputShape);var res=backend.runWebGLProgram(program,[flattenX,flattenIndex],flattenX.dtype);toDispose.push(res);var reshaped=reshape({inputs:{x:res},backend:backend,attrs:{shape:shapeInfo.outputShape}});toDispose.forEach(function(t){return backend.disposeIntermediateTensorInfo(t)});return reshaped}var gatherV2Config={kernelName:tf.GatherV2,backendName:"webgl",kernelFunc:gatherV2};var GREATER="return float(a > b);";var GREATER_PACKED="\n  return vec4(greaterThan(a, b));\n";var greater=binaryKernelFunc({opSnippet:GREATER,packedOpSnippet:GREATER_PACKED,cpuKernelImpl:greaterImplCPU,dtype:"bool"});var greaterConfig={kernelName:tf.Greater,backendName:"webgl",kernelFunc:greater};var GREATER_EQUAL="return float(a >= b);";var GREATER_EQUAL_PACKED="\n  return vec4(greaterThanEqual(a, b));\n";var greaterEqual=binaryKernelFunc({opSnippet:GREATER_EQUAL,packedOpSnippet:GREATER_EQUAL_PACKED,dtype:"bool",cpuKernelImpl:greaterEqualImplCPU});var greaterEqualConfig={kernelName:tf.GreaterEqual,backendName:"webgl",kernelFunc:greaterEqual};function ifft(args){var inputs=args.inputs,backend=args.backend;var input=inputs.input;return fftImpl(input,true,backend)}var ifftConfig={kernelName:tf.IFFT,backendName:"webgl",kernelFunc:ifft};var IS_FINITE="return float(!isnan(x) && !isinf(x));";var isFinite=unaryKernelFunc({opSnippet:IS_FINITE,dtype:"bool"});var isFiniteConfig={kernelName:tf.IsFinite,backendName:"webgl",kernelFunc:isFinite};var IS_INF="return float(isinf(x));";var isInf=unaryKernelFunc({opSnippet:IS_INF,dtype:"bool"});var isInfConfig={kernelName:tf.IsInf,backendName:"webgl",kernelFunc:isInf};var IS_NAN="return float(isnan(x));";var isNaN=unaryKernelFunc({opSnippet:IS_NAN,dtype:"bool"});var isNaNConfig={kernelName:tf.IsNan,backendName:"webgl",kernelFunc:isNaN};var LESS="return float(a < b);";var LESS_PACKED="\n  return vec4(lessThan(a, b));\n";var less=binaryKernelFunc({opSnippet:LESS,packedOpSnippet:LESS_PACKED,cpuKernelImpl:lessImplCPU,dtype:"bool"});var lessConfig={kernelName:tf.Less,backendName:"webgl",kernelFunc:less};var LESS_EQUAL="return float(a <= b);";var LESS_EQUAL_PACKED="\n  return vec4(lessThanEqual(a, b));\n";var lessEqual=binaryKernelFunc({opSnippet:LESS_EQUAL,packedOpSnippet:LESS_EQUAL_PACKED,cpuKernelImpl:lessEqualImplCPU,dtype:"bool"});var lessEqualConfig={kernelName:tf.LessEqual,backendName:"webgl",kernelFunc:lessEqual};function linSpace(args){var backend=args.backend,attrs=args.attrs;var start=attrs.start,stop=attrs.stop,num=attrs.num;var outVals=linSpaceImplCPU(start,stop,num);return backend.makeTensorInfo([outVals.length],"float32",outVals)}var linSpaceConfig={kernelName:tf.LinSpace,backendName:"webgl",kernelFunc:linSpace};var LOG="if (x < 0.0) return NAN;\n  return log(x);";var LOG_PACKED="\n  vec4 result = log(x);\n  vec4 isNaN = vec4(lessThan(x, vec4(0.0)));\n  result.r = isNaN.r == 1.0 ? NAN : result.r;\n  result.g = isNaN.g == 1.0 ? NAN : result.g;\n  result.b = isNaN.b == 1.0 ? NAN : result.b;\n  result.a = isNaN.a == 1.0 ? NAN : result.a;\n\n  return result;\n";var log=unaryKernelFunc({opSnippet:LOG,packedOpSnippet:LOG_PACKED,cpuKernelImpl:logImplCPU});var logConfig={kernelName:tf.Log,backendName:"webgl",kernelFunc:log};var LOG1P="return log(1.0 + x);";var log1p=unaryKernelFunc({opSnippet:LOG1P});var log1pConfig={kernelName:tf.Log1p,backendName:"webgl",kernelFunc:log1p};var LOGICAL_AND="return float(a >= 1.0 && b >= 1.0);";var LOGICAL_AND_PACKED="\n  return vec4(\n    vec4(greaterThanEqual(a, vec4(1.0))) *\n    vec4(greaterThanEqual(b, vec4(1.0))));\n";var logicalAnd=binaryKernelFunc({opSnippet:LOGICAL_AND,packedOpSnippet:LOGICAL_AND_PACKED,dtype:"bool"});var logicalAndConfig={kernelName:tf.LogicalAnd,backendName:"webgl",kernelFunc:logicalAnd};var LOGICAL_NOT="return float(!(x >= 1.0));";var logicalNot=unaryKernelFunc({opSnippet:LOGICAL_NOT});var logicalNotConfig={kernelName:tf.LogicalNot,backendName:"webgl",kernelFunc:logicalNot};var LOGICAL_OR="return float(a >= 1.0 || b >= 1.0);";var LOGICAL_OR_PACKED="\n  return min(\n    vec4(greaterThanEqual(a, vec4(1.0))) +\n    vec4(greaterThanEqual(b, vec4(1.0))),\n    vec4(1.0));\n";var logicalOr=binaryKernelFunc({opSnippet:LOGICAL_OR,packedOpSnippet:LOGICAL_OR_PACKED,dtype:"bool"});var logicalOrConfig={kernelName:tf.LogicalOr,backendName:"webgl",kernelFunc:logicalOr};var LRNProgram=function(){function LRNProgram(xShape,radius,bias,alpha,beta){this.variableNames=["x"];this.outputShape=[];var rad=radius;var maxD=xShape[3]-1;this.outputShape=xShape;var powOperator;var basis="float("+bias+") + float("+alpha+") * sum";if(beta===.5){powOperator="inversesqrt("+basis+")"}else if(beta===1){powOperator="1.0/("+basis+")"}else{powOperator="exp(log("+basis+") * float(-"+beta+"));"}this.userCode="\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int r = coords[1];\n        int c = coords[2];\n        int d = coords[3];\n        float x = getX(b, r, c, d);\n        float sum = 0.0;\n        for (int j = -"+rad+"; j <= "+rad+"; j++) {\n          int idx = d + j;\n          if (idx >= 0 && idx <=  "+maxD+") {\n            float z = getX(b, r, c, idx);\n            sum += z * z;\n          }\n        }\n        float val = x * "+powOperator+";\n        setOutput(val);\n      }\n    "}return LRNProgram}();var LRNPackedProgram=function(){function LRNPackedProgram(xShape,radius,bias,alpha,beta){this.variableNames=["x"];this.outputShape=[];this.packedInputs=true;this.packedOutput=true;var rad=radius;var maxD=xShape[3]-1;this.outputShape=xShape;var powOperator;var basis="float("+bias+") + float("+alpha+") * sum";if(beta===.5){powOperator="inversesqrt("+basis+")"}else if(beta===1){powOperator="1.0/("+basis+")"}else{powOperator="exp(log("+basis+") * float(-"+beta+"));"}this.userCode="\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords.x;\n        int r = coords.y;\n        int c = coords.z;\n        int d = coords.w;\n\n        bool hasNextCol = d < "+this.outputShape[3]+";\n        bool hasNextRow = c < "+this.outputShape[2]+";\n\n        vec4 sum = vec4(0.);\n        vec4 xFragAtOutputCoords = getX(b, r, c, d);\n\n        vec4 xAtOutputCoords = vec4(\n          getChannel(xFragAtOutputCoords, vec2(c, d)),\n          hasNextCol ?\n            getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0,\n          hasNextRow ?\n            getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0,\n          (hasNextRow && hasNextCol) ?\n            getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0\n        );\n\n        int firstChannel = d - "+rad+";\n        vec2 cache = vec2(0.);\n        if(firstChannel >= 0){\n          vec4 firstChannelFrag = getX(b, r, c, firstChannel);\n          cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel));\n            if(hasNextRow){\n              cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel));\n            }\n        }\n\n        ivec2 depth = ivec2(d, d + 1);\n        for (int j = - "+rad+"; j <= "+rad+"; j++) {\n          ivec2 idx = depth + j;\n          bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0));\n          bvec2 belowUpperBound = lessThanEqual(idx, ivec2("+maxD+"));\n\n          bool depthInRange = aboveLowerBound.x && belowUpperBound.x;\n          bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y;\n\n          if(depthInRange || depthPlusOneInRange){\n            vec4 z = vec4(0.);\n            vec4 xFragAtCurrentDepth;\n            z.xz = cache.xy;\n            if(depthPlusOneInRange && hasNextCol){\n              xFragAtCurrentDepth = idx.y != d ?\n                getX(b, r, c, idx.y) : xFragAtOutputCoords;\n              z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y));\n              if(hasNextRow){\n                z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y));\n              }\n            }\n            cache.xy = z.yw;\n            sum += z * z;\n          }\n        }\n        vec4 result = xAtOutputCoords * "+powOperator+";\n        setOutput(result);\n      }\n    "}return LRNPackedProgram}();var lrn=function(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var depthRadius=attrs.depthRadius,bias=attrs.bias,alpha=attrs.alpha,beta=attrs.beta;var program=tf.env().getBool("WEBGL_PACK_NORMALIZATION")?new LRNPackedProgram(x.shape,depthRadius,bias,alpha,beta):new LRNProgram(x.shape,depthRadius,bias,alpha,beta);return backend.runWebGLProgram(program,[x],x.dtype)};var LRNConfig={kernelName:tf.LRN,backendName:"webgl",kernelFunc:lrn};var LRNGradProgram=function(){function LRNGradProgram(inputShape,depthRadius,bias,alpha,beta){this.variableNames=["inputImage","outputImage","dy"];this.outputShape=[];this.outputShape=inputShape;this.depth=inputShape[3];this.depthRadius=depthRadius;this.bias=bias;this.alpha=alpha;this.beta=beta;this.userCode="\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int r = coords[1];\n        int c = coords[2];\n\n        float result = 0.0;\n        for (int d = 0; d < "+this.depth+"; ++d) {\n          int depthBegin = int(max(0.0, float(d - "+depthRadius+")));\n          int depthEnd = int(min(float("+this.depth+"),\n              float(d + "+depthRadius+" + 1)));\n\n          const int MIN_DEPTH_BEGIN = 0;\n          const int MAX_DEPTH_END = "+this.depth+";\n\n          float norm = 0.0;\n          for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) {\n            if (k < depthBegin){\n              continue;\n            }\n            else if (k >= depthBegin && k < depthEnd) {\n              norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);\n            }\n            else {\n              break;\n            }\n          }\n\n          norm = float("+alpha+") * norm + float("+bias+");\n\n          for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){\n            if (k < depthBegin){\n              continue;\n            }\n            else if (k >= depthBegin && k < depthEnd){\n              float dyi = -2.0 * float("+alpha+")\n                * float("+beta+")\n                * getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d)\n                / norm;\n              if (k == d) {\n                dyi += pow(norm, -1.0 * "+beta+");\n              }\n              if (k == coords[3]) {\n                dyi *= getDy(b, r, c, d);\n                result += dyi;\n              }\n            }\n            else {\n              break;\n            }\n          }\n      }\n      setOutput(result);\n      }\n    "}return LRNGradProgram}();var lrnGrad=function(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,y=inputs.y,dy=inputs.dy;var depthRadius=attrs.depthRadius,bias=attrs.bias,alpha=attrs.alpha,beta=attrs.beta;var program=new LRNGradProgram(x.shape,depthRadius,bias,alpha,beta);return backend.runWebGLProgram(program,[x,y,dy],x.dtype)};var LRNGradConfig={kernelName:tf.LRNGrad,backendName:"webgl",kernelFunc:lrnGrad};function maxImpl(x,reduceShape,outShape,backend){var inSize=tf.util.sizeFromShape(reduceShape);var xSize=tf.util.sizeFromShape(x.shape);var batchSize=xSize/inSize;var reshapedInput=reshape({inputs:{x:x},attrs:{shape:[batchSize,inSize]},backend:backend});var reduced=reduce(reshapedInput,x.dtype,"max",backend);var reshapedOutput=reshape({inputs:{x:reduced},attrs:{shape:outShape},backend:backend});backend.disposeIntermediateTensorInfo(reshapedInput);backend.disposeIntermediateTensorInfo(reduced);return reshapedOutput}function max(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var reductionIndices=attrs.reductionIndices,keepDims=attrs.keepDims;var xRank=x.shape.length;var origAxes=tf.util.parseAxisParam(reductionIndices,x.shape);var axes=origAxes;var permutedAxes=tf.backend_util.getAxesPermutation(axes,xRank);var maxInputIsTransposed=permutedAxes!=null;var shouldExecuteOnCPU=backend.shouldExecuteOnCPU([x]);var maxInput=x;if(maxInputIsTransposed){if(shouldExecuteOnCPU){var xTexData=backend.texData.get(maxInput.dataId);var values=xTexData.values;var newShape=new Array(xRank);for(var i=0;i<newShape.length;i++){newShape[i]=x.shape[permutedAxes[i]]}var maxInputValues=transposeImplCPU(values,x.shape,x.dtype,permutedAxes,newShape);maxInput=backend.makeTensorInfo(newShape,x.dtype);var maxInputData=backend.texData.get(maxInput.dataId);maxInputData.values=maxInputValues}else{maxInput=transposeImpl(x,permutedAxes,backend)}axes=tf.backend_util.getInnerMostAxes(axes.length,xRank)}tf.backend_util.assertAxesAreInnerMostDims("max",axes,xRank);var _a=__read(tf.backend_util.computeOutAndReduceShapes(maxInput.shape,axes),2),maxOutShape=_a[0],reduceShape=_a[1];var outShape=maxOutShape;if(keepDims){outShape=tf.backend_util.expandShapeToKeepDim(maxOutShape,origAxes)}var out;if(shouldExecuteOnCPU){var xTexData=backend.texData.get(maxInput.dataId);var values=xTexData.values;var outValues=maxImplCPU(values,tf.util.sizeFromShape(reduceShape),outShape,x.dtype);out=backend.makeTensorInfo(outShape,x.dtype);var outData=backend.texData.get(out.dataId);outData.values=outValues}else{out=maxImpl(maxInput,reduceShape,outShape,backend)}if(maxInputIsTransposed){backend.disposeIntermediateTensorInfo(maxInput)}return out}var maxConfig={kernelName:tf.Max,backendName:"webgl",kernelFunc:max};var MAXIMUM=CHECK_NAN_SNIPPET$1+"\n  return max(a, b);\n";var MAXIMUM_PACKED="\n  vec4 result = vec4(max(a, b));\n  vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n  "+CHECK_NAN_SNIPPET+"\n  return result;\n";var maximum=binaryKernelFunc({opSnippet:MAXIMUM,packedOpSnippet:MAXIMUM_PACKED,cpuKernelImpl:maximumImplCPU});var maximumConfig={kernelName:tf.Maximum,backendName:"webgl",kernelFunc:maximum};function maxPool(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;assertNotComplex(x,"maxPool");var filterSize=attrs.filterSize,strides=attrs.strides,pad=attrs.pad,dimRoundingMode=attrs.dimRoundingMode;var dilations=1;tf.util.assert(tf.backend_util.eitherStridesOrDilationsAreOne(strides,dilations),function(){return"Error in maxPool: Either strides or dilations must be 1. "+("Got strides "+strides+" and dilations '"+dilations+"'")});var convInfo=tf.backend_util.computePool2DInfo(x.shape,filterSize,strides,dilations,pad,dimRoundingMode);if(convInfo.filterWidth===1&&convInfo.filterHeight===1&&tf.util.arraysEqual(convInfo.inShape,convInfo.outShape)){return identity({inputs:{x:x},backend:backend})}var maxPoolProgram=new Pool2DProgram(convInfo,"max",false);return backend.runWebGLProgram(maxPoolProgram,[x],x.dtype)}var maxPoolConfig={kernelName:tf.MaxPool,backendName:"webgl",kernelFunc:maxPool};function maxPool3d(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var filterSize=attrs.filterSize,strides=attrs.strides,pad=attrs.pad,dataFormat=attrs.dataFormat,dimRoundingMode=attrs.dimRoundingMode;var dilations=[1,1,1];var convInfo=tf.backend_util.computePool3DInfo(x.shape,filterSize,strides,dilations,pad,dimRoundingMode,dataFormat);var maxPoolProgram=new Pool3DProgram(convInfo,"max",false);return backend.runWebGLProgram(maxPoolProgram,[x],x.dtype)}var maxPool3DConfig={kernelName:tf.MaxPool3D,backendName:"webgl",kernelFunc:maxPool3d};var MaxPool2DBackpropProgram=function(){function MaxPool2DBackpropProgram(convInfo){this.variableNames=["dy","maxPos"];this.outputShape=convInfo.inShape;var strideHeight=convInfo.strideHeight;var strideWidth=convInfo.strideWidth;var dilationHeight=convInfo.dilationHeight;var effectiveFilterHeight=convInfo.effectiveFilterHeight;var effectiveFilterWidth=convInfo.effectiveFilterWidth;var padTop=effectiveFilterHeight-1-convInfo.padInfo.top;var padLeft=effectiveFilterWidth-1-convInfo.padInfo.left;var lastIndex=effectiveFilterHeight*effectiveFilterWidth-1;this.userCode="\n      const ivec2 pads = ivec2("+padTop+", "+padLeft+");\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n\n        ivec2 dyRCCorner = coords.yz - pads;\n        int dyRCorner = dyRCCorner.x;\n        int dyCCorner = dyRCCorner.y;\n\n        // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n        for (int wR = 0; wR < "+effectiveFilterHeight+";\n          wR += "+dilationHeight+") {\n          float dyR = float(dyRCorner + wR) / "+strideHeight+".0;\n\n          if (dyR < 0.0 || dyR >= "+convInfo.outHeight+".0 || fract(dyR) > 0.0) {\n            continue;\n          }\n          int idyR = int(dyR);\n\n          for (int wC = 0; wC < "+effectiveFilterWidth+"; wC++) {\n            float dyC = float(dyCCorner + wC) / "+strideWidth+".0;\n\n            if (dyC < 0.0 || dyC >= "+convInfo.outWidth+".0 ||\n                fract(dyC) > 0.0) {\n              continue;\n            }\n            int idyC = int(dyC);\n\n            float dyValue = getDy(b, idyR, idyC, d);\n            int maxPosValue = "+lastIndex+" - int(getMaxPos(b, idyR, idyC, d));\n\n            // Get the current value, check it against the value from the\n            // position matrix.\n            int curPosValue = wR * "+effectiveFilterWidth+" + wC;\n            float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n            dotProd += dyValue * mask;\n          }\n        }\n        setOutput(dotProd);\n      }\n    "}return MaxPool2DBackpropProgram}();var MaxPool3DBackpropProgram=function(){function MaxPool3DBackpropProgram(convInfo){this.variableNames=["dy","maxPos"];this.outputShape=convInfo.inShape;var strideDepth=convInfo.strideDepth;var strideHeight=convInfo.strideHeight;var strideWidth=convInfo.strideWidth;var dilationDepth=convInfo.dilationDepth;var dilationHeight=convInfo.dilationHeight;var dilationWidth=convInfo.dilationWidth;var effectiveFilterDepth=convInfo.effectiveFilterDepth;var effectiveFilterHeight=convInfo.effectiveFilterHeight;var effectiveFilterWidth=convInfo.effectiveFilterWidth;var padFront=effectiveFilterDepth-1-convInfo.padInfo.front;var padTop=effectiveFilterHeight-1-convInfo.padInfo.top;var padLeft=effectiveFilterWidth-1-convInfo.padInfo.left;var lastIndex=effectiveFilterDepth*effectiveFilterHeight*effectiveFilterWidth-1;this.userCode="\n      const ivec3 pads = ivec3("+padFront+", "+padTop+", "+padLeft+");\n\n      void main() {\n        ivec5 coords = getOutputCoords();\n        int batch = coords.x;\n        int ch = coords.u;\n\n        ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n        int dyDCorner = dyCorner.x;\n        int dyRCorner = dyCorner.y;\n        int dyCCorner = dyCorner.z;\n\n        // Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get\n        // dx(xD, xR, xC, ch).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n\n        for (int wD = 0; wD < "+effectiveFilterDepth+";\n           wD += "+dilationDepth+") {\n          float dyD = float(dyDCorner + wD) / "+strideDepth+".0;\n\n          if (dyD < 0.0 || dyD >= "+convInfo.outDepth+".0 || fract(dyD) > 0.0) {\n            continue;\n          }\n          int idyD = int(dyD);\n\n          for (int wR = 0; wR < "+effectiveFilterHeight+";\n              wR += "+dilationHeight+") {\n            float dyR = float(dyRCorner + wR) / "+strideHeight+".0;\n\n            if (dyR < 0.0 || dyR >= "+convInfo.outHeight+".0 ||\n                fract(dyR) > 0.0) {\n              continue;\n            }\n            int idyR = int(dyR);\n\n            for (int wC = 0; wC < "+effectiveFilterWidth+";\n                wC += "+dilationWidth+") {\n              float dyC = float(dyCCorner + wC) / "+strideWidth+".0;\n\n              if (dyC < 0.0 || dyC >= "+convInfo.outWidth+".0 ||\n                  fract(dyC) > 0.0) {\n                continue;\n              }\n              int idyC = int(dyC);\n\n              float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n              int maxPosValue = "+lastIndex+" -\n                  int(getMaxPos(batch, idyD, idyR, idyC, ch));\n\n              // Get the current value, check it against the value from the\n              // position matrix.\n              int curPosValue =\n                  wD * "+effectiveFilterHeight+" * "+effectiveFilterWidth+" +\n                  wR * "+effectiveFilterWidth+" + wC;\n              float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n              dotProd += dyValue * mask;\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    "}return MaxPool3DBackpropProgram}();function maxPool3DGrad(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var dy=inputs.dy,input=inputs.input;var x=input;var filterSize=attrs.filterSize,strides=attrs.strides,pad=attrs.pad,dimRoundingMode=attrs.dimRoundingMode;var dilations=[1,1,1];var convInfo=tf.backend_util.computePool3DInfo(x.shape,filterSize,strides,dilations,pad,dimRoundingMode);var maxPool3dPositionsProgram=new Pool3DProgram(convInfo,"max",true);var maxPool3dPositions=backend.runWebGLProgram(maxPool3dPositionsProgram,[x],x.dtype);var maxPoolBackpropProgram=new MaxPool3DBackpropProgram(convInfo);var result=backend.runWebGLProgram(maxPoolBackpropProgram,[dy,maxPool3dPositions],x.dtype);backend.disposeIntermediateTensorInfo(maxPool3dPositions);return result}var maxPoolGrad3DConfig={kernelName:tf.MaxPool3DGrad,backendName:"webgl",kernelFunc:maxPool3DGrad};function maxPoolGrad(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var dy=inputs.dy,input=inputs.input,output=inputs.output;var x=input;assertNotComplex([input,output],"maxPoolGrad");var filterSize=attrs.filterSize,strides=attrs.strides,pad=attrs.pad,dimRoundingMode=attrs.dimRoundingMode;var convInfo=tf.backend_util.computePool2DInfo(x.shape,filterSize,strides,1,pad,dimRoundingMode);var getPositions=true;var maxPoolPositionsProgram=new Pool2DProgram(convInfo,"max",getPositions);var maxPoolPositions=backend.runWebGLProgram(maxPoolPositionsProgram,[x],x.dtype);var maxPoolBackPropProgram=new MaxPool2DBackpropProgram(convInfo);var result=backend.runWebGLProgram(maxPoolBackPropProgram,[dy,maxPoolPositions],x.dtype);backend.disposeIntermediateTensorInfo(maxPoolPositions);return result}var maxPoolGradConfig={kernelName:tf.MaxPoolGrad,backendName:"webgl",kernelFunc:maxPoolGrad};function maxPoolWithArgmaxImpl(x,includeBatchInIndex,convInfo,backend){var program=new Pool2DProgram(convInfo,"max",false);var poolOutput=backend.runWebGLProgram(program,[x],"float32");program=new Pool2DProgram(convInfo,"max",true,true,includeBatchInIndex);var indexOutput=backend.runWebGLProgram(program,[x],"float32");return[poolOutput,indexOutput]}var maxPoolWithArgmaxConfig={kernelName:tf.MaxPoolWithArgmax,backendName:"webgl",kernelFunc:function(_a){var inputs=_a.inputs,attrs=_a.attrs,backend=_a.backend;var x=inputs.x;var filterSize=attrs.filterSize,strides=attrs.strides,pad=attrs.pad,includeBatchInIndex=attrs.includeBatchInIndex;var webglBackend=backend;tf.util.assert(x.shape.length===4,function(){return"Error in maxPool: input must be rank 4 but got rank "+x.shape.length+"."});var dilations=[1,1];tf.util.assert(tf.backend_util.eitherStridesOrDilationsAreOne(strides,dilations),function(){return"Error in maxPool: Either strides or dilations must be 1. "+("Got strides "+strides+" and dilations '"+dilations+"'")});var convInfo=tf.backend_util.computePool2DInfo(x.shape,filterSize,strides,dilations,pad);var _b=__read(maxPoolWithArgmaxImpl(x,includeBatchInIndex,convInfo,webglBackend),2),result=_b[0],indexes=_b[1];return[result,indexes]}};function meanImpl(x,reduceShape,outShape,backend){var inSize=tf.util.sizeFromShape(reduceShape);var xSize=tf.util.sizeFromShape(x.shape);var batchSize=xSize/inSize;var reshapedInput=reshape({inputs:{x:x},attrs:{shape:[batchSize,inSize]},backend:backend});var reduced=reduce(reshapedInput,"float32","mean",backend);var reshapedOutput=reshape({inputs:{x:reduced},attrs:{shape:outShape},backend:backend});backend.disposeIntermediateTensorInfo(reshapedInput);backend.disposeIntermediateTensorInfo(reduced);return reshapedOutput}var meanConfig={kernelName:tf.Mean,backendName:"webgl",kernelFunc:function(_a){var e_1,_b;var inputs=_a.inputs,attrs=_a.attrs,backend=_a.backend;var x=inputs.x;var keepDims=attrs.keepDims,axis=attrs.axis;var webglBackend=backend;var xRank=x.shape.length;var origAxes=tf.util.parseAxisParam(axis,x.shape);var axes=origAxes;var permutedAxes=tf.backend_util.getAxesPermutation(axes,xRank);var meanInputIsTransposed=permutedAxes!=null;var shouldExecuteOnCPU=webglBackend.shouldExecuteOnCPU([x]);var intermediates=[];var meanInput=x;if(meanInputIsTransposed){if(shouldExecuteOnCPU){var xTexData=webglBackend.texData.get(meanInput.dataId);var values=xTexData.values;var newShape=new Array(xRank);for(var i=0;i<newShape.length;i++){newShape[i]=x.shape[permutedAxes[i]]}var meanInputValues=transposeImplCPU(values,x.shape,x.dtype,permutedAxes,newShape);meanInput=webglBackend.makeTensorInfo(newShape,x.dtype);var meanInputData=webglBackend.texData.get(meanInput.dataId);meanInputData.values=meanInputValues}else{meanInput=transposeImpl(x,permutedAxes,webglBackend)}intermediates.push(meanInput);axes=tf.backend_util.getInnerMostAxes(axes.length,xRank)}tf.backend_util.assertAxesAreInnerMostDims("sum",axes,xRank);var _c=__read(tf.backend_util.computeOutAndReduceShapes(meanInput.shape,axes),2),meanOutShape=_c[0],reduceShape=_c[1];var outShape=meanOutShape;if(keepDims){outShape=tf.backend_util.expandShapeToKeepDim(meanOutShape,origAxes)}var out=meanImpl(meanInput,reduceShape,outShape,webglBackend);try{for(var intermediates_1=__values(intermediates),intermediates_1_1=intermediates_1.next();!intermediates_1_1.done;intermediates_1_1=intermediates_1.next()){var i=intermediates_1_1.value;webglBackend.disposeIntermediateTensorInfo(i)}}catch(e_1_1){e_1={error:e_1_1}}finally{try{if(intermediates_1_1&&!intermediates_1_1.done&&(_b=intermediates_1.return))_b.call(intermediates_1)}finally{if(e_1)throw e_1.error}}return out}};function min(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var axis=attrs.axis,keepDims=attrs.keepDims;var xRank=x.shape.length;var origAxes=tf.util.parseAxisParam(axis,x.shape);var axes=origAxes;var permutedAxes=tf.backend_util.getAxesPermutation(axes,xRank);var permutedX=x;if(permutedAxes!=null){permutedX=transpose({inputs:{x:x},backend:backend,attrs:{perm:permutedAxes}});axes=tf.backend_util.getInnerMostAxes(axes.length,x.shape.length)}tf.backend_util.assertAxesAreInnerMostDims("min",axes,xRank);var _a=__read(tf.backend_util.computeOutAndReduceShapes(permutedX.shape,axes),2),outShape=_a[0],reduceShape=_a[1];var inSize=tf.util.sizeFromShape(reduceShape);var a2D=reshape({inputs:{x:permutedX},backend:backend,attrs:{shape:[-1,inSize]}});var reduced=reduce(a2D,a2D.dtype,"min",backend);var res;if(keepDims){var newShape=tf.backend_util.expandShapeToKeepDim(outShape,origAxes);res=reshape({inputs:{x:reduced},backend:backend,attrs:{shape:newShape}})}else{res=reshape({inputs:{x:reduced},backend:backend,attrs:{shape:outShape}})}backend.disposeIntermediateTensorInfo(a2D);backend.disposeIntermediateTensorInfo(reduced);if(permutedAxes!=null){backend.disposeIntermediateTensorInfo(permutedX)}return res}var minConfig={kernelName:tf.Min,backendName:"webgl",kernelFunc:min};var MINIMUM=CHECK_NAN_SNIPPET$1+"\n  return min(a, b);\n";var MINIMUM_PACKED="\n  vec4 result = vec4(min(a, b));\n  vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n  "+CHECK_NAN_SNIPPET+"\n  return result;\n";var minimum=binaryKernelFunc({opSnippet:MINIMUM,packedOpSnippet:MINIMUM_PACKED,cpuKernelImpl:minimumImplCPU});var minimumConfig={kernelName:tf.Minimum,backendName:"webgl",kernelFunc:minimum};var MirrorPadProgram=function(){function MirrorPadProgram(xShape,paddings,mode){this.variableNames=["x"];this.outputShape=paddings.map(function(p,i){return p[0]+xShape[i]+p[1]});var rank=xShape.length;var dtype=getCoordsDataType(rank);var start=paddings.map(function(p){return p[0]}).join(",");var end=paddings.map(function(p,i){return p[0]+xShape[i]}).join(",");var unpackedCoords=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,rank);var offset=mode==="reflect"?0:1;if(rank===1){this.userCode="\n        int start = "+start+";\n        int end = "+end+";\n\n        void main() {\n          int outC = getOutputCoords();\n          if (outC < start) {\n            outC = start * 2 - outC - "+offset+";\n          } else if(outC >= end) {\n            outC = (end - 1) * 2 - outC + "+offset+";\n          }\n          setOutput(getX(outC - start));\n        }\n      ";return}this.userCode="\n      "+dtype+" start = "+dtype+"("+start+");\n      "+dtype+" end = "+dtype+"("+end+");\n\n      void main() {\n        "+dtype+" outC = getOutputCoords();\n        for (int i = 0; i < "+rank+"; i++) {\n          if (outC[i] < start[i]) {\n            outC[i] = start[i] * 2 - outC[i] - "+offset+";\n          } else if(outC[i] >= end[i]) {\n            outC[i] = (end[i] - 1) * 2 - outC[i] + "+offset+";\n          }\n        }\n        "+dtype+" coords = outC - start;\n        setOutput(getX("+unpackedCoords+"));\n      }\n    "}return MirrorPadProgram}();var MirrorPadPackedProgram=function(){function MirrorPadPackedProgram(xShape,paddings,mode){this.variableNames=["x"];this.packedInputs=true;this.packedOutput=true;this.outputShape=paddings.map(function(p,i){return p[0]+xShape[i]+p[1]});var rank=xShape.length;var dtype=getCoordsDataType(rank);var start=paddings.map(function(p){return p[0]}).join(",");var end=paddings.map(function(p,i){return p[0]+xShape[i]}).join(",");var coords=getChannels("rc",rank);var source=getChannels("source",rank);var cLimit=coords[rank-1]+" < "+this.outputShape[rank-1];var innerDims=rank===1?"source":"vec2("+source.slice(-2).join()+")";var offset=mode==="reflect"?0:1;var mainLoop="";if(rank===1){var padSetup="\n        "+dtype+" source = rc;\n        if (source < start) {\n          source = start * 2 - source - "+offset+";\n        } else if (source >= end) {\n          source = (end - 1) * 2 - source + "+offset+";\n        }\n        source -= start;\n      ";mainLoop="\n        "+dtype+" rc = outputLoc;\n        "+padSetup+"\n        result[0] = getChannel(getX("+source.join()+"), "+innerDims+");\n        "+coords[rank-1]+" += 1;\n        if("+cLimit+") {\n          "+padSetup+"\n          result[1] = getChannel(getX("+source.join()+"), "+innerDims+");\n        }\n      "}else{var padSetup="\n        "+dtype+" source = rc;\n        "+dtype+" lt = "+dtype+"(lessThan(source, start));\n        "+dtype+" gte = "+dtype+"(greaterThanEqual(source, end));\n        "+dtype+" orig = 1 - (lt + gte);\n        source = orig * source +\n                lt * (start * 2 - source - "+offset+") +\n                gte * ((end - 1) * 2 - source + "+offset+");\n        source -= start;\n      ";mainLoop="\n        "+dtype+" rc = outputLoc;\n        "+padSetup+"\n        result[0] = getChannel(getX("+source.join()+"), "+innerDims+");\n        "+coords[rank-1]+" += 1;\n        if("+cLimit+") {\n          "+padSetup+"\n          result[1] = getChannel(getX("+source.join()+"), "+innerDims+");\n        }\n        rc = outputLoc;\n        "+coords[rank-2]+" += 1;\n        if("+coords[rank-2]+" < "+this.outputShape[rank-2]+") {\n          "+padSetup+"\n          result[2] = getChannel(getX("+source.join()+"), "+innerDims+");\n          "+coords[rank-1]+" += 1;\n          if("+cLimit+") {\n            "+padSetup+"\n            result[3] = getChannel(getX("+source.join()+"), "+innerDims+");\n          }\n        }\n      "}this.userCode="\n      const "+dtype+" start = "+dtype+"("+start+");\n      const "+dtype+" end = "+dtype+"("+end+");\n\n      void main() {\n        "+dtype+" outputLoc = getOutputCoords();\n        vec4 result = vec4(0.);\n        "+mainLoop+"\n        setOutput(result);\n      }\n    "}return MirrorPadPackedProgram}();var mirrorPadKernelFunc=function(_a){var inputs=_a.inputs,backend=_a.backend,attrs=_a.attrs;var x=inputs.x;var paddings=attrs.paddings,mode=attrs.mode;var program=tf.env().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new MirrorPadPackedProgram(x.shape,paddings,mode):new MirrorPadProgram(x.shape,paddings,mode);var output=backend.runWebGLProgram(program,[x],x.dtype);return output};var mirrorPadConfig={kernelName:tf.MirrorPad,backendName:"webgl",kernelFunc:mirrorPadKernelFunc};var MOD="if (b == 0.0) return NAN;\n  return mod(a, b);";var MOD_PACKED="\n  vec4 result = mod(a, b);\n  vec4 isNaN = vec4(equal(b, vec4(0.0)));\n  "+CHECK_NAN_SNIPPET+"\n  return result;\n";var mod=binaryKernelFunc({opSnippet:MOD,packedOpSnippet:MOD_PACKED});var modConfig={kernelName:tf.Mod,backendName:"webgl",kernelFunc:mod};var MultinomialProgram=function(){function MultinomialProgram(batchSize,numOutcomes,numSamples){this.variableNames=["probs"];this.customUniforms=[{name:"seed",type:"float"}];this.outputShape=[batchSize,numSamples];this.userCode="\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int batch = coords[0];\n\n        float r = random(seed);\n        float cdf = 0.0;\n\n        for (int i = 0; i < "+(numOutcomes-1)+"; i++) {\n          cdf += getProbs(batch, i);\n\n          if (r < cdf) {\n            setOutput(float(i));\n            return;\n          }\n        }\n\n        // If no other event happened, last event happened.\n        setOutput(float("+(numOutcomes-1)+"));\n      }\n    "}return MultinomialProgram}();var DIV="\nif (a == b) {\n  return 1.0;\n};\nreturn a / b;";var DIV_PACKED="\n  // vec4 one = vec4(equal(a, b));\n  // return one + (vec4(1.0) - one) * a / b;\n  vec4 result = a / b;\n  if(a.x == b.x) {\n    result.x = 1.;\n  }\n  if(a.y == b.y) {\n    result.y = 1.;\n  }\n  if(a.z == b.z) {\n    result.z = 1.;\n  }\n  if(a.w == b.w) {\n    result.w = 1.;\n  }\n\n  return result;\n";var realDiv=binaryKernelFunc({opSnippet:DIV,packedOpSnippet:DIV_PACKED,checkOutOfBounds:true});var realDivConfig={kernelName:tf.RealDiv,backendName:"webgl",kernelFunc:realDiv};var SUB="return a - b;";var sub=binaryKernelFunc({opSnippet:SUB,packedOpSnippet:SUB,supportsComplex:true,cpuKernelImpl:subImplCPU});var subConfig={kernelName:tf.Sub,backendName:"webgl",kernelFunc:sub};function softmax(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var logits=inputs.logits;var dim=attrs.dim;var axes=tf.util.parseAxisParam([dim],logits.shape);var maxLogit=max({inputs:{x:logits},backend:backend,attrs:{reductionIndices:axes,keepDims:false}});var expandedShape=tf.backend_util.expandShapeToKeepDim(maxLogit.shape,axes);var maxLogitsReshaped=reshape({inputs:{x:maxLogit},backend:backend,attrs:{shape:expandedShape}});var a=sub({inputs:{a:logits,b:maxLogitsReshaped},backend:backend});var b=exp({inputs:{x:a},backend:backend});var sumExp=sum({inputs:{x:b},backend:backend,attrs:{axis:axes,keepDims:false}});var sumExpReshaped=reshape({inputs:{x:sumExp},backend:backend,attrs:{shape:expandedShape}});var res=realDiv({inputs:{a:b,b:sumExpReshaped},backend:backend});backend.disposeIntermediateTensorInfo(maxLogit);backend.disposeIntermediateTensorInfo(maxLogitsReshaped);backend.disposeIntermediateTensorInfo(a);backend.disposeIntermediateTensorInfo(b);backend.disposeIntermediateTensorInfo(sumExp);backend.disposeIntermediateTensorInfo(sumExpReshaped);return res}var softmaxConfig={kernelName:tf.Softmax,backendName:"webgl",kernelFunc:softmax};function multinomial(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var logits=inputs.logits;var numSamples=attrs.numSamples,seed=attrs.seed,normalized=attrs.normalized;var probs=normalized?logits:softmax({inputs:{logits:logits},backend:backend,attrs:{dim:logits.shape.length-1}});var batchSize=probs.shape[0];var numOutcomes=probs.shape[1];var program=new MultinomialProgram(batchSize,numOutcomes,numSamples);var customValues=[[seed]];var res=backend.runWebGLProgram(program,[probs],"int32",customValues);if(!normalized){backend.disposeIntermediateTensorInfo(probs)}return res}var multinomialConfig={kernelName:tf.Multinomial,backendName:"webgl",kernelFunc:multinomial};var NEG="return -x;";function neg(args){var inputs=args.inputs,backend=args.backend;var x=inputs.x;if(backend.shouldExecuteOnCPU([x])){var xData=backend.texData.get(x.dataId);var _a=__read(negImplCPU(xData.values,x.shape,x.dtype),2),outValues=_a[0],newShape=_a[1];return backend.makeTensorInfo(newShape,x.dtype,outValues)}var program;if(tf.env().getBool("WEBGL_PACK_UNARY_OPERATIONS")){program=new UnaryOpPackedProgram(x.shape,NEG)}else{program=new UnaryOpProgram(x.shape,NEG)}return backend.runWebGLProgram(program,[x],x.dtype)}var negConfig={kernelName:tf.Neg,backendName:"webgl",kernelFunc:neg};var nonMaxSuppressionV3Impl=tf.kernel_impls.nonMaxSuppressionV3Impl;function nonMaxSuppressionV3(args){tf.backend_util.warn("tf.nonMaxSuppression() in webgl locks the UI thread. "+"Call tf.nonMaxSuppressionAsync() instead");var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var boxes=inputs.boxes,scores=inputs.scores;var maxOutputSize=attrs.maxOutputSize,iouThreshold=attrs.iouThreshold,scoreThreshold=attrs.scoreThreshold;var boxesVals=backend.readSync(boxes.dataId);var scoresVals=backend.readSync(scores.dataId);var selectedIndices=nonMaxSuppressionV3Impl(boxesVals,scoresVals,maxOutputSize,iouThreshold,scoreThreshold).selectedIndices;return backend.makeTensorInfo([selectedIndices.length],"int32",new Int32Array(selectedIndices))}var nonMaxSuppressionV3Config={kernelName:tf.NonMaxSuppressionV3,backendName:"webgl",kernelFunc:nonMaxSuppressionV3};var nonMaxSuppressionV4Impl=tf.kernel_impls.nonMaxSuppressionV4Impl;function nonMaxSuppressionV4(args){tf.backend_util.warn("tf.nonMaxSuppression() in webgl locks the UI thread. "+"Call tf.nonMaxSuppressionAsync() instead");var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var boxes=inputs.boxes,scores=inputs.scores;var maxOutputSize=attrs.maxOutputSize,iouThreshold=attrs.iouThreshold,scoreThreshold=attrs.scoreThreshold,padToMaxOutputSize=attrs.padToMaxOutputSize;var boxesVals=backend.readSync(boxes.dataId);var scoresVals=backend.readSync(scores.dataId);var _a=nonMaxSuppressionV4Impl(boxesVals,scoresVals,maxOutputSize,iouThreshold,scoreThreshold,padToMaxOutputSize),selectedIndices=_a.selectedIndices,validOutputs=_a.validOutputs;return[backend.makeTensorInfo([selectedIndices.length],"int32",new Int32Array(selectedIndices)),backend.makeTensorInfo([],"int32",new Int32Array([validOutputs]))]}var nonMaxSuppressionV4Config={kernelName:tf.NonMaxSuppressionV4,backendName:"webgl",kernelFunc:nonMaxSuppressionV4};var nonMaxSuppressionV5Impl=tf.kernel_impls.nonMaxSuppressionV5Impl;function nonMaxSuppressionV5(args){tf.backend_util.warn("tf.nonMaxSuppression() in webgl locks the UI thread. "+"Call tf.nonMaxSuppressionAsync() instead");var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var boxes=inputs.boxes,scores=inputs.scores;var maxOutputSize=attrs.maxOutputSize,iouThreshold=attrs.iouThreshold,scoreThreshold=attrs.scoreThreshold,softNmsSigma=attrs.softNmsSigma;var boxesVals=backend.readSync(boxes.dataId);var scoresVals=backend.readSync(scores.dataId);var maxOutputSizeVal=maxOutputSize;var iouThresholdVal=iouThreshold;var scoreThresholdVal=scoreThreshold;var softNmsSigmaVal=softNmsSigma;var _a=nonMaxSuppressionV5Impl(boxesVals,scoresVals,maxOutputSizeVal,iouThresholdVal,scoreThresholdVal,softNmsSigmaVal),selectedIndices=_a.selectedIndices,selectedScores=_a.selectedScores;return[backend.makeTensorInfo([selectedIndices.length],"int32",new Int32Array(selectedIndices)),backend.makeTensorInfo([selectedScores.length],"float32",new Float32Array(selectedScores))]}var nonMaxSuppressionV5Config={kernelName:tf.NonMaxSuppressionV5,backendName:"webgl",kernelFunc:nonMaxSuppressionV5};var OneHotProgram=function(){function OneHotProgram(numIndices,depth,onValue,offValue){this.variableNames=["indices"];this.outputShape=[numIndices,depth];this.userCode="\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int index = round(getIndices(coords.x));\n        setOutput(mix(float("+offValue+"), float("+onValue+"),\n                      float(index == coords.y)));\n      }\n    "}return OneHotProgram}();var oneHot=function(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var indices=inputs.indices;var depth=attrs.depth,onValue=attrs.onValue,offValue=attrs.offValue;var indicesSize=tf.util.sizeFromShape(indices.shape);var program=new OneHotProgram(indicesSize,depth,onValue,offValue);var reshaped=reshape({inputs:{x:indices},backend:backend,attrs:{shape:[indicesSize]}});var result=backend.runWebGLProgram(program,[reshaped],indices.dtype);backend.disposeIntermediateTensorInfo(reshaped);var outShape=__spread(indices.shape,[depth]);var out=reshape({inputs:{x:result},backend:backend,attrs:{shape:outShape}});backend.disposeIntermediateTensorInfo(result);return out};var oneHotConfig={kernelName:tf.OneHot,backendName:"webgl",kernelFunc:oneHot};function zerosLike(args){var inputs=args.inputs,backend=args.backend;var x=inputs.x;if(x.dtype==="complex64"){var realPart=real({inputs:{input:x},backend:backend});var r=zerosLike({inputs:{x:realPart},backend:backend});var imagPart=imag({inputs:{input:x},backend:backend});var i=zerosLike({inputs:{x:imagPart},backend:backend});var result=complex({inputs:{real:r,imag:i},backend:backend});backend.disposeIntermediateTensorInfo(realPart);backend.disposeIntermediateTensorInfo(r);backend.disposeIntermediateTensorInfo(imagPart);backend.disposeIntermediateTensorInfo(i);return result}else{return fill({attrs:{shape:x.shape,dtype:x.dtype,value:x.dtype==="string"?"":0},backend:backend})}}var zerosLikeConfig={kernelName:tf.ZerosLike,backendName:"webgl",kernelFunc:zerosLike};function onesLike(args){var inputs=args.inputs,backend=args.backend;var x=inputs.x;if(x.dtype==="string"){throw new Error("onesLike is not supported under string dtype")}else if(x.dtype==="complex64"){var realPart=real({inputs:{input:x},backend:backend});var r=onesLike({inputs:{x:realPart},backend:backend});var imagPart=imag({inputs:{input:x},backend:backend});var i=zerosLike({inputs:{x:imagPart},backend:backend});var result=complex({inputs:{real:r,imag:i},backend:backend});backend.disposeIntermediateTensorInfo(realPart);backend.disposeIntermediateTensorInfo(r);backend.disposeIntermediateTensorInfo(imagPart);backend.disposeIntermediateTensorInfo(i);return result}else{return fill({attrs:{shape:x.shape,dtype:x.dtype,value:1},backend:backend})}}var onesLikeConfig={kernelName:tf.OnesLike,backendName:"webgl",kernelFunc:onesLike};function pack(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var axis=attrs.axis;if(inputs.length===1){return expandDims({inputs:{input:inputs[0]},backend:backend,attrs:{dim:axis}})}var shape=inputs[0].shape;var dtype=inputs[0].dtype;inputs.forEach(function(t){tf.util.assertShapesMatch(shape,t.shape,"All tensors passed to stack must have matching shapes");tf.util.assert(dtype===t.dtype,function(){return"All tensors passed to stack must have matching dtypes"})});var intermediateTensorInfos=[];var expandedTensors=inputs.map(function(t){var expandedT=expandDims({inputs:{input:t},backend:backend,attrs:{dim:axis}});intermediateTensorInfos.push(expandedT);return expandedT});var result=concat({inputs:expandedTensors,backend:backend,attrs:{axis:axis}});intermediateTensorInfos.forEach(function(t){return backend.disposeIntermediateTensorInfo(t)});return result}var packConfig={kernelName:tf.Pack,backendName:"webgl",kernelFunc:pack};var PadProgram=function(){function PadProgram(xShape,paddings,constantValue){this.variableNames=["x"];this.customUniforms=[{name:"value",type:"float"}];this.outputShape=paddings.map(function(p,i){return p[0]+xShape[i]+p[1]});var rank=xShape.length;var type=getCoordsDataType(rank);var start=paddings.map(function(p){return p[0]}).join(",");var end=paddings.map(function(p,i){return p[0]+xShape[i]}).join(",");var unpackedCoords=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,rank);if(rank===1){this.userCode="\n        int start = "+start+";\n        int end = "+end+";\n\n        void main() {\n          int outC = getOutputCoords();\n          if (outC < start || outC >= end) {\n            setOutput(value);\n          } else {\n            setOutput(getX(outC - start));\n          }\n        }\n      ";return}this.userCode="\n      "+type+" start = "+type+"("+start+");\n      "+type+" end = "+type+"("+end+");\n\n      void main() {\n        "+type+" outC = getOutputCoords();\n        if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {\n          setOutput(value);\n        } else {\n          "+type+" coords = outC - start;\n          setOutput(getX("+unpackedCoords+"));\n        }\n      }\n    "}return PadProgram}();var PadPackedProgram=function(){function PadPackedProgram(xShape,paddings,constantValue){this.variableNames=["x"];this.packedInputs=true;this.packedOutput=true;this.customUniforms=[{name:"value",type:"float"}];this.outputShape=paddings.map(function(p,i){return p[0]+xShape[i]+p[1]});var rank=xShape.length;var dtype=getCoordsDataType(rank);var start=paddings.map(function(p){return p[0]}).join(",");var end=paddings.map(function(p,i){return p[0]+xShape[i]}).join(",");var coords=getChannels("rc",rank);var source=getChannels("source",rank);var cLimit=coords[rank-1]+" < "+this.outputShape[rank-1];var innerDims=rank===1?"source":"vec2("+source.slice(-2).join()+")";var componentSetup=[dtype+" rc = outputLoc;",coords[rank-1]+" += 1;\n       if("+cLimit+") {\n      ",rank===1?"":"}\n       rc = outputLoc;\n       "+coords[rank-2]+" += 1;\n       if("+coords[rank-2]+" < "+this.outputShape[rank-2]+") {",rank===1?"":"  "+coords[rank-1]+" += 1;\n         if("+cLimit+") {"];var paddingArea=rank===1?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))";var mainLoop="";for(var i=0,j=rank===1?2:4;i<j;i++){mainLoop+="\n        "+componentSetup[i]+"\n        if ("+paddingArea+") {\n          result["+i+"] = float(value);\n        } else {\n          "+dtype+" source = rc - start;\n          result["+i+"] = getChannel(getX("+source.join()+"), "+innerDims+");\n        }\n      "}mainLoop+=rank===1?"} ":"}}";this.userCode="\n      const "+dtype+" start = "+dtype+"("+start+");\n      const "+dtype+" end = "+dtype+"("+end+");\n\n      void main() {\n        "+dtype+" outputLoc = getOutputCoords();\n        vec4 result = vec4(0.);\n        "+mainLoop+"\n        setOutput(result);\n      }\n    "}return PadPackedProgram}();var padV2=function(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var paddings=attrs.paddings,constantValue=attrs.constantValue;if(tf.util.sizeFromShape(x.shape)===0){var outputShape=paddings.map(function(p,i){return p[0]+x.shape[i]+p[1]});return fill({backend:backend,attrs:{shape:outputShape,value:constantValue,dtype:x.dtype}})}var program=tf.env().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new PadPackedProgram(x.shape,paddings,constantValue):new PadProgram(x.shape,paddings,constantValue);var customValues=[[constantValue]];return backend.runWebGLProgram(program,[x],x.dtype,customValues)};var padV2Config={kernelName:tf.PadV2,backendName:"webgl",kernelFunc:padV2};var POW="\n  if(a < 0.0 && floor(b) < b){\n    return NAN;\n  }\n  if (b == 0.0) {\n    return 1.0;\n  }\n  return (round(mod(b, 2.0)) != 1) ?\n      pow(abs(a), b) : sign(a) * pow(abs(a), b);\n";var POW_PACKED="\n  // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise.\n  vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1)));\n  vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);\n  vec4 result = multiplier * pow(abs(a), b);\n\n  // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS\n  bvec4 isExpZero = equal(b, vec4(0.0));\n  result.r = isExpZero.r ? 1.0 : result.r;\n  result.g = isExpZero.g ? 1.0 : result.g;\n  result.b = isExpZero.b ? 1.0 : result.b;\n  result.a = isExpZero.a ? 1.0 : result.a;\n\n  vec4 isNaN = vec4(lessThan(a, vec4(0.0))) * vec4(lessThan(floor(b), b));\n  "+CHECK_NAN_SNIPPET+"\n  return result;\n";var pow=binaryKernelFunc({opSnippet:POW,packedOpSnippet:POW_PACKED});var powConfig={kernelName:tf.Pow,backendName:"webgl",kernelFunc:pow};function prod(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var axis=attrs.axis,keepDims=attrs.keepDims;var xRank=x.shape.length;var toDispose=[];var origAxes=tf.util.parseAxisParam(axis,x.shape);var axes=origAxes;var permutedAxes=tf.backend_util.getAxesPermutation(axes,xRank);var permutedX=x;if(permutedAxes!=null){permutedX=transpose({inputs:{x:x},backend:backend,attrs:{perm:permutedAxes}});axes=tf.backend_util.getInnerMostAxes(axes.length,xRank);toDispose.push(permutedX)}tf.backend_util.assertAxesAreInnerMostDims("prod",axes,xRank);var res;if(backend.shouldExecuteOnCPU([permutedX])){var xVals=backend.texData.get(permutedX.dataId).values;var _a=prodImplCPU(permutedX.shape,permutedX.dtype,xVals,axes),outVals=_a.outVals,outShape=_a.outShape,outDtype=_a.outDtype;res=backend.makeTensorInfo(outShape,outDtype,outVals)}else{var _b=__read(tf.backend_util.computeOutAndReduceShapes(permutedX.shape,axes),2),outShape=_b[0],reduceShape=_b[1];var inSize=tf.util.sizeFromShape(reduceShape);var a2D=reshape({inputs:{x:permutedX},backend:backend,attrs:{shape:[-1,inSize]}});var outputDType=tf.sumOutType(x.dtype);var reduced=reduce(a2D,outputDType,"prod",backend);res=reshape({inputs:{x:reduced},backend:backend,attrs:{shape:outShape}});toDispose.push(a2D);toDispose.push(reduced)}if(keepDims){toDispose.push(res);var newShape=tf.backend_util.expandShapeToKeepDim(res.shape,origAxes);res=reshape({inputs:{x:res},backend:backend,attrs:{shape:newShape}})}toDispose.forEach(function(t){return backend.disposeIntermediateTensorInfo(t)});return res}var prodConfig={kernelName:tf.Prod,backendName:"webgl",kernelFunc:prod};var range=function(args){var backend=args.backend,attrs=args.attrs;var start=attrs.start,stop=attrs.stop,step=attrs.step,dtype=attrs.dtype;var values=rangeImplCPU(start,stop,step,dtype);return backend.makeTensorInfo([values.length],dtype,values)};var rangeConfig={kernelName:tf.Range,backendName:"webgl",kernelFunc:range};var RECIPROCAL="return 1.0 / x;";var reciprocal=unaryKernelFunc({opSnippet:RECIPROCAL});var reciprocalConfig={kernelName:tf.Reciprocal,backendName:"webgl",kernelFunc:reciprocal};var RELU=CHECK_NAN_SNIPPET$2+"\n  return (x < 0.0) ? 0.0 : x;\n";var RELU_PACKED="\n  vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));\n  bvec4 isNaN = isnan(x);\n\n  result.r = isNaN.r ? x.r : result.r;\n  result.g = isNaN.g ? x.g : result.g;\n  result.b = isNaN.b ? x.b : result.b;\n  result.a = isNaN.a ? x.a : result.a;\n\n  return result;\n";var relu=unaryKernelFunc({opSnippet:RELU,packedOpSnippet:RELU_PACKED});var reluConfig={kernelName:tf.Relu,backendName:"webgl",kernelFunc:relu};var RELU6=CHECK_NAN_SNIPPET$2+"\n  return (x < 0.0) ? 0.0 : min(6.0, x);\n";var RELU6_PACKED="\n  vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));\n  bvec4 isNaN = isnan(x);\n\n  result.r = isNaN.r ? x.r : result.r;\n  result.g = isNaN.g ? x.g : result.g;\n  result.b = isNaN.b ? x.b : result.b;\n  result.a = isNaN.a ? x.a : result.a;\n\n  return result;\n";var relu6=unaryKernelFunc({opSnippet:RELU6,packedOpSnippet:RELU6_PACKED});var relu6Config={kernelName:tf.Relu6,backendName:"webgl",kernelFunc:relu6};var ResizeBilinearProgram=function(){function ResizeBilinearProgram(inputShape,newHeight,newWidth,alignCorners,halfPixelCenters){this.variableNames=["A"];this.outputShape=[];var _a=__read(inputShape,4),batch=_a[0],oldHeight=_a[1],oldWidth=_a[2],depth=_a[3];this.outputShape=[batch,newHeight,newWidth,depth];var effectiveInSize=[alignCorners&&newHeight>1?oldHeight-1:oldHeight,alignCorners&&newWidth>1?oldWidth-1:oldWidth];var effectiveOutSize=[alignCorners&&newHeight>1?newHeight-1:newHeight,alignCorners&&newWidth>1?newWidth-1:newWidth];var sourceFracIndexRC;if(halfPixelCenters){sourceFracIndexRC="(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC"+" - vec2(0.5)"}else{sourceFracIndexRC="vec2(yRC) * effectiveInputOverOutputRatioRC"}this.userCode="\n      const vec2 effectiveInputOverOutputRatioRC = vec2(\n          "+effectiveInSize[0]/effectiveOutSize[0]+",\n          "+effectiveInSize[1]/effectiveOutSize[1]+");\n      const vec2 inputShapeRC = vec2("+oldHeight+".0, "+oldWidth+".0);\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n        ivec2 yRC = coords.yz;\n\n        // Fractional source index.\n        vec2 sourceFracIndexRC = "+sourceFracIndexRC+";\n\n        // Compute the four integer indices.\n        ivec2 sourceFloorRC = ivec2(max(sourceFracIndexRC, vec2(0.0)));\n        ivec2 sourceCeilRC = ivec2(\n          min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n        float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d);\n        float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d);\n        float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d);\n        float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d);\n\n        vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC);\n\n        float top = topLeft + (topRight - topLeft) * fracRC.y;\n        float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;\n        float newValue = top + (bottom - top) * fracRC.x;\n\n        setOutput(newValue);\n      }\n    "}return ResizeBilinearProgram}();var ResizeBilinearPackedProgram=function(){function ResizeBilinearPackedProgram(inputShape,newHeight,newWidth,alignCorners,halfPixelCenters){this.variableNames=["A"];this.packedInputs=true;this.packedOutput=true;this.outputShape=[];var _a=__read(inputShape,4),batch=_a[0],oldHeight=_a[1],oldWidth=_a[2],depth=_a[3];this.outputShape=[batch,newHeight,newWidth,depth];var effectiveInSize=[alignCorners&&newHeight>1?oldHeight-1:oldHeight,alignCorners&&newWidth>1?oldWidth-1:oldWidth];var effectiveOutSize=[alignCorners&&newHeight>1?newHeight-1:newHeight,alignCorners&&newWidth>1?newWidth-1:newWidth];var sourceFracIndexRC;if(halfPixelCenters){sourceFracIndexRC="(vec3(yRC) + vec3(0.5)) * "+"effectiveInputOverOutputRatioRC - vec3(0.5)"}else{sourceFracIndexRC="vec3(yRC) * effectiveInputOverOutputRatioRC"}this.userCode="\n      const vec3 effectiveInputOverOutputRatioRC = vec3(\n          "+effectiveInSize[0]/effectiveOutSize[0]+",\n          "+effectiveInSize[1]/effectiveOutSize[1]+",\n          "+effectiveInSize[1]/effectiveOutSize[1]+");\n      const vec3 inputShapeRC = vec3("+oldHeight+".0, "+oldWidth+".0,\n                                     "+oldWidth+".0);\n\n      float getAValue(int b, int r, int c, int d) {\n        return getChannel(getA(b, r, c, d), vec2(c, d));\n      }\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n        // Calculate values for next column in yRC.z.\n        ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\n\n        // Fractional source index.\n        vec3 sourceFracIndexRC = "+sourceFracIndexRC+";\n\n        // Compute the four integer indices.\n        ivec3 sourceFloorRC = ivec3(max(sourceFracIndexRC, vec3(0.0)));\n        ivec3 sourceCeilRC = ivec3(\n          min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n        // Should we calculate next column and row elements in 2x2 packed cell.\n        bool hasNextCol = d < "+(depth-1)+";\n        bool hasNextRow = coords.z < "+(newWidth-1)+";\n\n        // In parallel, construct four corners for all four components in\n        // packed 2x2 cell.\n        vec4 topLeft = vec4(\n          getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d),\n          hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1)\n                     : 0.0,\n          hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d)\n                     : 0.0,\n          (hasNextRow && hasNextCol) ?\n            getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n        vec4 bottomLeft = vec4(\n          getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d),\n          hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1)\n                     : 0.0,\n          hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d)\n                     : 0.0,\n          (hasNextRow && hasNextCol) ?\n            getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n        vec4 topRight = vec4(\n          getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d),\n          hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1)\n                     : 0.0,\n          hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d)\n                     : 0.0,\n          (hasNextRow && hasNextCol) ?\n            getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n        vec4 bottomRight = vec4(\n          getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d),\n          hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1)\n                     : 0.0,\n          hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d)\n                     : 0.0,\n          (hasNextRow && hasNextCol) ?\n            getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n        vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC);\n\n        vec4 top = mix(topLeft, topRight, fracRC.yyzz);\n        vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz);\n        vec4 newValue = mix(top, bottom, fracRC.x);\n\n        setOutput(newValue);\n      }\n    "}return ResizeBilinearPackedProgram}();function resizeBilinear(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var images=inputs.images;var alignCorners=attrs.alignCorners,halfPixelCenters=attrs.halfPixelCenters,size=attrs.size;var _a=__read(size,2),newHeight=_a[0],newWidth=_a[1];var program=tf.env().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new ResizeBilinearPackedProgram(images.shape,newHeight,newWidth,alignCorners,halfPixelCenters):new ResizeBilinearProgram(images.shape,newHeight,newWidth,alignCorners,halfPixelCenters);return backend.runWebGLProgram(program,[images],"float32")}var resizeBilinearConfig={kernelName:tf.ResizeBilinear,backendName:"webgl",kernelFunc:resizeBilinear};var ResizeBilinearBackpropProgram=function(){function ResizeBilinearBackpropProgram(dyShape,inputShape,alignCorners){this.variableNames=["dy"];this.outputShape=[];this.outputShape=inputShape;var _a=__read(inputShape,3),xHeight=_a[1],xWidth=_a[2];var _b=__read(dyShape,3),yHeight=_b[1],yWidth=_b[2];var effectiveXSize=[alignCorners&&yHeight>1?xHeight-1:xHeight,alignCorners&&yWidth>1?xWidth-1:xWidth];var effectiveYSize=[alignCorners&&yHeight>1?yHeight-1:yHeight,alignCorners&&yWidth>1?yWidth-1:yWidth];var heightScale=effectiveXSize[0]/effectiveYSize[0];var widthScale=effectiveXSize[1]/effectiveYSize[1];var invHeightScale=1/heightScale;var invWidthScale=1/widthScale;var winHeight=Math.ceil(invHeightScale)*2+2;var winWidth=Math.ceil(invWidthScale)*2+2;this.userCode="\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n        int r = coords[1];\n        int c = coords[2];\n\n        float accumulator = 0.0;\n\n        const float heightScale = float("+heightScale+");\n        const float widthScale = float("+widthScale+");\n\n        const float invHeightScale = float("+invHeightScale+");\n        const float invWidthScale = float("+invWidthScale+");\n\n        const int winHeight = int("+winHeight+");\n        const int winWidth = int("+winWidth+");\n\n        // Compute bounds for where in dy we will look\n        float startRLerp = floor(float(r) * invHeightScale);\n        int startDyR = int(startRLerp - float(winHeight / 2));\n\n        float startCLerp = floor(float(c) * invWidthScale);\n        int startDyC = int(startCLerp - float(winWidth / 2));\n\n        // Loop over dy\n        for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n          int dyR = dyROffset + startDyR;\n\n          // Guard against the window exceeding the bounds of dy\n          if (dyR < 0 || dyR >= "+yHeight+") {\n            continue;\n          }\n\n          for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n            int dyC = dyCOffset + startDyC;\n\n            // Guard against the window exceeding the bounds of dy\n            if (dyC < 0 || dyC >= "+yWidth+") {\n              continue;\n            }\n\n            float dxR = float(dyR) * heightScale;\n            int topDxRIndex = int(floor(dxR));\n            int bottomDxRIndex = int(min(ceil(dxR), "+(xHeight-1)+".0));\n            float dxRLerp = dxR - float(topDxRIndex);\n            float inverseDxRLerp = 1.0 - dxRLerp;\n\n            float dxC = float(dyC) * widthScale;\n            int leftDxCIndex = int(floor(dxC));\n            int rightDxCIndex = int(min(ceil(dxC), "+(xWidth-1)+".0));\n            float dxCLerp = dxC - float(leftDxCIndex);\n            float inverseDxCLerp = 1.0 - dxCLerp;\n\n            if (r == topDxRIndex && c == leftDxCIndex) {\n              // topLeft\n              accumulator +=\n                getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp;\n            }\n\n            if (r == topDxRIndex && c == rightDxCIndex) {\n              // topRight\n              accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp;\n            }\n\n            if (r == bottomDxRIndex && c == leftDxCIndex) {\n              // bottomLeft\n              accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp;\n            }\n\n            if (r == bottomDxRIndex && c == rightDxCIndex) {\n              // bottomRight\n              accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp;\n            }\n          }\n        }\n        // End loop over dy\n\n        setOutput(accumulator);\n      }\n    "}return ResizeBilinearBackpropProgram}();function resizeBilinearGrad(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var images=inputs.images,dy=inputs.dy;var alignCorners=attrs.alignCorners;var program=new ResizeBilinearBackpropProgram(dy.shape,images.shape,alignCorners);return backend.runWebGLProgram(program,[dy],dy.dtype)}var resizeBilinearGradConfig={kernelName:tf.ResizeBilinearGrad,backendName:"webgl",kernelFunc:resizeBilinearGrad};var ResizeNearestNeighborProgram=function(){function ResizeNearestNeighborProgram(inputShape,newHeight,newWidth,alignCorners,halfPixelCenters){this.variableNames=["A"];this.outputShape=[];var _a=__read(inputShape,4),batch=_a[0],oldHeight=_a[1],oldWidth=_a[2],depth=_a[3];this.outputShape=[batch,newHeight,newWidth,depth];var effectiveInSize=[alignCorners&&newHeight>1?oldHeight-1:oldHeight,alignCorners&&newWidth>1?oldWidth-1:oldWidth];var effectiveOutSize=[alignCorners&&newHeight>1?newHeight-1:newHeight,alignCorners&&newWidth>1?newWidth-1:newWidth];var roundBase=alignCorners?"0.5":"0.0";var sourceFracIndexRC;if(halfPixelCenters){sourceFracIndexRC="max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC"+", vec2(0.0))"}else{sourceFracIndexRC="vec2(yRC) * effectiveInputOverOutputRatioRC"}this.userCode="\n      const vec2 effectiveInputOverOutputRatioRC = vec2(\n          "+effectiveInSize[0]/effectiveOutSize[0]+",\n          "+effectiveInSize[1]/effectiveOutSize[1]+");\n      const vec2 inputShapeRC = vec2("+oldHeight+".0, "+oldWidth+".0);\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n        ivec2 yRC = coords.yz;\n\n        // Fractional source index.\n        vec2 sourceFracIndexRC = "+sourceFracIndexRC+";\n\n        // Compute the coordinators of nearest neighbor point.\n        ivec2 sourceNearestRC = ivec2(\n          min(inputShapeRC - 1.0, floor(sourceFracIndexRC + "+roundBase+")));\n        float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);\n\n        setOutput(newValue);\n      }\n    "}return ResizeNearestNeighborProgram}();var ResizeNearestNeighborPackedProgram=function(){function ResizeNearestNeighborPackedProgram(inputShape,newHeight,newWidth,alignCorners,halfPixelCenters){this.variableNames=["A"];this.packedInputs=true;this.packedOutput=true;this.outputShape=[];var _a=__read(inputShape,4),batch=_a[0],oldHeight=_a[1],oldWidth=_a[2],depth=_a[3];this.outputShape=[batch,newHeight,newWidth,depth];var effectiveInSize=[alignCorners&&newHeight>1?oldHeight-1:oldHeight,alignCorners&&newWidth>1?oldWidth-1:oldWidth];var effectiveOutSize=[alignCorners&&newHeight>1?newHeight-1:newHeight,alignCorners&&newWidth>1?newWidth-1:newWidth];var roundBase=alignCorners?"0.5":"0.0";var sourceFracIndexRC;if(halfPixelCenters){sourceFracIndexRC="max((vec3(yRC) + vec3(0.5)) * "+"effectiveInputOverOutputRatioRC, vec3(0.0))"}else{sourceFracIndexRC="vec3(yRC) * effectiveInputOverOutputRatioRC"}this.userCode="\n      const vec3 effectiveInputOverOutputRatioRC = vec3(\n          "+effectiveInSize[0]/effectiveOutSize[0]+",\n          "+effectiveInSize[1]/effectiveOutSize[1]+",\n          "+effectiveInSize[1]/effectiveOutSize[1]+");\n      const vec3 inputShapeRC = vec3("+oldHeight+".0, "+oldWidth+".0,\n                                     "+oldWidth+".0);\n\n      float getAValue(int b, int r, int c, int d) {\n        return getChannel(getA(b, r, c, d), vec2(c, d));\n      }\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n        // Calculate values for next column in yRC.z.\n        ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\n\n        // Fractional source index.\n        vec3 sourceFracIndexRC = "+sourceFracIndexRC+";\n\n        // Compute the coordinators of nearest neighbor point.\n        ivec3 sourceNearestRC = ivec3(\n          min(inputShapeRC - 1.0, floor(sourceFracIndexRC + "+roundBase+")));\n\n        // Should we calculate next column and row elements in 2x2 packed cell.\n        bool hasNextCol = d < "+(depth-1)+";\n        bool hasNextRow = coords.z < "+(newWidth-1)+";\n\n        vec4 newValue = vec4(\n          getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d),\n          hasNextCol ? getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d + 1)\n                     : 0.0,\n          hasNextRow ? getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d)\n                     : 0.0,\n          (hasNextRow && hasNextCol) ?\n            getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d + 1) : 0.0);\n\n        setOutput(newValue);\n      }\n    "}return ResizeNearestNeighborPackedProgram}();function resizeNearestNeighbor(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var images=inputs.images;var alignCorners=attrs.alignCorners,halfPixelCenters=attrs.halfPixelCenters,size=attrs.size;var _a=__read(size,2),newHeight=_a[0],newWidth=_a[1];var program=tf.env().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new ResizeNearestNeighborPackedProgram(images.shape,newHeight,newWidth,alignCorners,halfPixelCenters):new ResizeNearestNeighborProgram(images.shape,newHeight,newWidth,alignCorners,halfPixelCenters);return backend.runWebGLProgram(program,[images],images.dtype)}var resizeNearestNeighborConfig={kernelName:tf.ResizeNearestNeighbor,backendName:"webgl",kernelFunc:resizeNearestNeighbor};var ResizeNearestNeigborBackpropProgram=function(){function ResizeNearestNeigborBackpropProgram(dyShape,inputShape,alignCorners){this.variableNames=["dy"];this.outputShape=[];this.outputShape=inputShape;var _a=__read(inputShape,3),xHeight=_a[1],xWidth=_a[2];var _b=__read(dyShape,3),yHeight=_b[1],yWidth=_b[2];var effectiveXSize=[alignCorners&&yHeight>1?xHeight-1:xHeight,alignCorners&&yWidth>1?xWidth-1:xWidth];var effectiveYSize=[alignCorners&&yHeight>1?yHeight-1:yHeight,alignCorners&&yWidth>1?yWidth-1:yWidth];var heightScale=effectiveXSize[0]/effectiveYSize[0];var widthScale=effectiveXSize[1]/effectiveYSize[1];var invHeightScale=1/heightScale;var invWidthScale=1/widthScale;var winHeight=Math.ceil(invHeightScale)*2+2;var winWidth=Math.ceil(invWidthScale)*2+2;this.userCode="\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n        int r = coords[1];\n        int c = coords[2];\n\n        float accumulator = 0.0;\n\n        const float heightScale = float("+heightScale+");\n        const float widthScale = float("+widthScale+");\n\n        const float invHeightScale = float("+invHeightScale+");\n        const float invWidthScale = float("+invWidthScale+");\n\n        const int winHeight = int("+winHeight+");\n        const int winWidth = int("+winWidth+");\n\n        // Compute bounds for where in dy we will look\n        float startRLerp = floor(float(r) * invHeightScale);\n        int startDyR = int(floor(startRLerp - float(winHeight / 2)));\n\n        float startCLerp = floor(float(c) * invWidthScale);\n        int startDyC = int(floor(startCLerp - float(winWidth / 2)));\n\n        // Loop over dy\n        for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n          int dyR = dyROffset + startDyR;\n\n          // Guard against the window exceeding the bounds of dy\n          if (dyR < 0 || dyR >= "+yHeight+") {\n            continue;\n          }\n\n          for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n            int dyC = dyCOffset + startDyC;\n\n            // Guard against the window exceeding the bounds of dy\n            if (dyC < 0 || dyC >= "+yWidth+") {\n              continue;\n            }\n\n            float sourceFracRow =\n              float("+effectiveXSize[0]+") *\n                (float(dyR) / float("+effectiveYSize[0]+"));\n\n            float sourceFracCol =\n                float("+effectiveXSize[1]+") *\n                  (float(dyC) / float("+effectiveYSize[1]+"));\n\n            int sourceNearestRow = int(min(\n                float(int("+xHeight+") - 1),\n                "+alignCorners+" ? float(round(sourceFracRow)) :\n                                  float(floor(sourceFracRow))));\n\n            int sourceNearestCol = int(min(\n                float(int("+xWidth+") - 1),\n                "+alignCorners+" ? float(round(sourceFracCol)) :\n                                  float(floor(sourceFracCol))));\n\n            if (r == sourceNearestRow && c == sourceNearestCol) {\n              accumulator += getDy(b, dyR, dyC, d);\n            }\n          }\n        }\n        // End loop over dy\n\n        setOutput(accumulator);\n      }\n    "}return ResizeNearestNeigborBackpropProgram}();function resizeNearestNeighborGrad(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var images=inputs.images,dy=inputs.dy;var alignCorners=attrs.alignCorners;var program=new ResizeNearestNeigborBackpropProgram(dy.shape,images.shape,alignCorners);return backend.runWebGLProgram(program,[dy],dy.dtype)}var resizeNearestNeighborGradConfig={kernelName:tf.ResizeNearestNeighborGrad,backendName:"webgl",kernelFunc:resizeNearestNeighborGrad};var ReverseProgram=function(){function ReverseProgram(xShape,axis){this.variableNames=["x"];var rank=xShape.length;if(rank>4){throw new Error("WebGL backend: Reverse of rank-"+rank+" tensor is not yet supported")}this.outputShape=xShape;if(rank===1){this.userCode="\n        void main() {\n          int coord = getOutputCoords();\n          setOutput(getX("+xShape[0]+" - coord - 1));\n        }\n      ";return}var getInCoord=function(i){if(axis.indexOf(i)!==-1&&xShape[i]!==1){return xShape[i]+" - coords["+i+"] - 1"}return"coords["+i+"]"};var inCoords=xShape.map(function(_,i){return getInCoord(i)}).join(",");var type=getCoordsDataType(rank);this.userCode="\n      void main() {\n        "+type+" coords = getOutputCoords();\n        setOutput(getX("+inCoords+"));\n      }\n    "}return ReverseProgram}();var ReversePackedProgram=function(){function ReversePackedProgram(xShape,axis){this.variableNames=["x"];this.packedInputs=true;this.packedOutput=true;var rank=xShape.length;if(rank>4){throw new Error("WebGL backend: Reverse of rank-"+rank+" tensor is not yet supported")}this.outputShape=xShape;var channels=getChannels("rc",rank);var nextColumn=channels[rank-1]+" + 1 < "+this.outputShape[rank-1];var nextRow=channels[rank-2]+" + 1 < "+this.outputShape[rank-2];var type=getCoordsDataType(rank);if(rank===1){this.userCode="\n        void main(){\n          int rc = getOutputCoords();\n          vec4 result = vec4(0.);\n          result.r = getChannel(getX("+xShape[0]+" - rc - 1),\n            "+xShape[0]+" - rc - 1);\n          if("+nextColumn+"){\n              result.g = getChannel(getX("+xShape[0]+" - (rc  + 1) - 1),\n                "+xShape[0]+" - (rc  + 1) - 1);\n          }\n          setOutput(result);\n        }\n      "}else{this.userCode="\n        void main() {\n          "+type+" rc = getOutputCoords();\n          vec4 result = vec4(0.);\n          result.r = "+getR(channels.slice())+";\n          if("+nextColumn+"){\n            result.g = "+getG(channels.slice())+";\n          }\n          if("+nextRow+") {\n            result.b = "+getB(channels.slice())+";\n            if("+nextColumn+") {\n              result.a = "+getA(channels.slice())+";\n            }\n          }\n          setOutput(result);\n        }\n    "}function getR(channels){return getChannel(channels)}function getG(channels){channels[rank-1]="("+channels[rank-1]+" + 1)";return getChannel(channels)}function getB(channels){channels[rank-2]="("+channels[rank-2]+" + 1)";return getChannel(channels)}function getA(channels){channels[rank-1]="("+channels[rank-1]+" + 1)";channels[rank-2]="("+channels[rank-2]+" + 1)";return getChannel(channels)}function getChannel(channels){var inCoordsArray=xShape.map(function(_,i){return getInCoord(i,channels)});var inCoords=inCoordsArray.join(",");var innerDims=inCoordsArray.slice(-2).join(",");return"getChannel(getX("+inCoords+"), vec2("+innerDims+"))"}function getInCoord(i,channels1){if(axis.indexOf(i)!==-1&&xShape[i]!==1){return xShape[i]+" - "+channels1[i]+" - 1"}else{return""+channels1[i]}}}return ReversePackedProgram}();function reverse(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var dims=attrs.dims;var xRank=x.shape.length;var $dims=tf.util.parseAxisParam(dims,x.shape);if(xRank===0){return identity({inputs:{x:x},backend:backend})}var program=tf.env().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new ReversePackedProgram(x.shape,$dims):new ReverseProgram(x.shape,$dims);return backend.runWebGLProgram(program,[x],x.dtype)}var reverseConfig={kernelName:tf.Reverse,backendName:"webgl",kernelFunc:reverse};var RotateProgram=function(){function RotateProgram(imageShape,fillValue){this.variableNames=["Image"];this.outputShape=[];this.customUniforms=[{name:"params",type:"vec4"}];var imageHeight=imageShape[1];var imageWidth=imageShape[2];this.outputShape=imageShape;var fillSnippet="";if(typeof fillValue==="number"){fillSnippet="float outputValue = "+fillValue.toFixed(2)+";"}else{fillSnippet="\n        vec3 fill = vec3("+fillValue.join(",")+");\n        float outputValue = fill[coords[3]];"}this.userCode="\n        void main() {\n          ivec4 coords = getOutputCoords();\n          int x = coords[2];\n          int y = coords[1];\n          float coordXFloat = (float(x) - params[0]) * params[3] -\n            (float(y) - params[1]) * params[2];\n          float coordYFloat = (float(x) - params[0]) * params[2] +\n            (float(y) - params[1]) * params[3];\n          int coordX = int(round(coordXFloat + params[0]));\n          int coordY = int(round(coordYFloat + params[1]));\n          "+fillSnippet+"\n          if(coordX >= 0 && coordX < "+imageWidth+" && coordY >= 0 && coordY < "+imageHeight+") {\n            outputValue = getImage(coords[0], coordY, coordX, coords[3]);\n          }\n          setOutput(outputValue);\n        }\n    "}return RotateProgram}();var rotateWithOffsetConfig={kernelName:tf.RotateWithOffset,backendName:"webgl",kernelFunc:function(_a){var inputs=_a.inputs,attrs=_a.attrs,backend=_a.backend;var image=inputs.image;var radians=attrs.radians,fillValue=attrs.fillValue,center=attrs.center;var webglBackend=backend;var program=new RotateProgram(image.shape,fillValue);var _b=__read(tf.backend_util.getImageCenter(center,image.shape[1],image.shape[2]),2),centerX=_b[0],centerY=_b[1];var customValues=[[centerX,centerY,Math.sin(radians),Math.cos(radians)]];var output=webglBackend.runWebGLProgram(program,[image],image.dtype,customValues);return output}};var ROUND="\n  // OpenGL ES does not support round function.\n  // The algorithm is based on banker's rounding.\n  float base = floor(x);\n  if ((x - base) < 0.5) {\n    return floor(x);\n  } else if ((x - base) > 0.5) {\n    return ceil(x);\n  } else {\n    if (mod(base, 2.0) == 0.0) {\n      return base;\n    } else {\n      return base + 1.0;\n    }\n  }\n";var round=unaryKernelFunc({opSnippet:ROUND});var roundConfig={kernelName:tf.Round,backendName:"webgl",kernelFunc:round};var RSQRT="return inversesqrt(x);";var rsqrt=unaryKernelFunc({opSnippet:RSQRT,cpuKernelImpl:rsqrtImplCPU});var rsqrtConfig={kernelName:tf.Rsqrt,backendName:"webgl",kernelFunc:rsqrt};var ScatterProgram=function(){function ScatterProgram(updateSize,sliceDim,indicesRank,updatesRank,strides,shape,summingDupeIndex){this.variableNames=["updates","indices","defaultValue"];this.outputShape=shape;var stridesType=getCoordsDataType(strides.length);var dtype=getCoordsDataType(shape.length);var indicesString="";if(indicesRank===1){indicesString="i"}else if(indicesRank===2){indicesString="i, j"}var indicesSnippet="getIndices("+indicesString+")";var updatesString="";if(updatesRank===1){updatesString="i"}else if(updatesRank===2){updatesString="i, coords[1]"}var updatesSnippet="getUpdates("+updatesString+")";var strideString=sliceDim>1?"strides[j]":"strides";this.userCode="\n        "+stridesType+" strides = "+stridesType+"("+strides+");\n\n        void main() {\n          "+dtype+" coords = getOutputCoords();\n          float sum = 0.0;\n          bool found = false;\n          for (int i = 0; i < "+updateSize+"; i++) {\n            int flattenedIndex = 0;\n            for (int j = 0; j < "+sliceDim+"; j++) {\n              int index = round("+indicesSnippet+");\n              flattenedIndex += index * "+strideString+";\n            }\n            if (flattenedIndex == coords[0]) {\n              sum += "+updatesSnippet+";\n              found = true;\n            }\n          }\n          setOutput(mix(getDefaultValue(), sum, float(found)));\n        }\n      "}return ScatterProgram}();function scatterNd(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var indices=inputs.indices,updates=inputs.updates;var shape=attrs.shape;var _a=tf.backend_util.calculateShapes(updates,indices,shape),sliceRank=_a.sliceRank,numUpdates=_a.numUpdates,sliceSize=_a.sliceSize,strides=_a.strides,outputSize=_a.outputSize;var flattenShape=[outputSize/sliceSize,sliceSize];if(outputSize===0){return backend.makeTensorInfo(shape,indices.dtype)}var flattenIndices=reshape({inputs:{x:indices},backend:backend,attrs:{shape:[numUpdates,sliceRank]}});var flattenX=reshape({inputs:{x:updates},backend:backend,attrs:{shape:[numUpdates,sliceSize]}});var defaultValue=backend.makeTensorInfo([],"float32",new Float32Array([0]));var program=new ScatterProgram(numUpdates,sliceRank,flattenIndices.shape.length,flattenX.shape.length,strides,flattenShape);var res=backend.runWebGLProgram(program,[flattenX,flattenIndices,defaultValue],flattenX.dtype);var reshaped=reshape({inputs:{x:res},backend:backend,attrs:{shape:shape}});backend.disposeIntermediateTensorInfo(flattenIndices);backend.disposeIntermediateTensorInfo(flattenX);backend.disposeIntermediateTensorInfo(res);backend.disposeIntermediateTensorInfo(defaultValue);return reshaped}var scatterNdConfig={kernelName:tf.ScatterNd,backendName:"webgl",kernelFunc:scatterNd};var SelectProgram=function(){function SelectProgram(cRank,shape,rank){this.variableNames=["c","a","b"];this.outputShape=shape;var cCoords;var abCoords;if(rank>4){throw Error("Where for rank "+rank+" is not yet supported")}if(rank===1){abCoords="resRC";cCoords="resRC"}else{var currentCoords=["resRC.x","resRC.y","resRC.z","resRC.w"];var cCoordVars=[];var abCoordVars=[];for(var i=0;i<shape.length;i++){abCoordVars.push(""+currentCoords[i]);if(i<cRank){cCoordVars.push(""+currentCoords[i])}}cCoords=cCoordVars.join();abCoords=abCoordVars.join()}var dtype=getCoordsDataType(rank);this.userCode="\n      void main() {\n        "+dtype+" resRC = getOutputCoords();\n        float cVal = getC("+cCoords+");\n        if (cVal >= 1.0) {\n          setOutput(getA("+abCoords+"));\n        } else {\n          setOutput(getB("+abCoords+"));\n        }\n      }\n    "}return SelectProgram}();function select(args){var inputs=args.inputs,backend=args.backend;var condition=inputs.condition,t=inputs.t,e=inputs.e;var program=new SelectProgram(condition.shape.length,t.shape,t.shape.length);return backend.runWebGLProgram(program,[condition,t,e],tf.upcastType(t.dtype,e.dtype))}var selectConfig={kernelName:tf.Select,backendName:"webgl",kernelFunc:select};var SELU="\n  // Stable and Attracting Fixed Point (0, 1) for Normalized Weights.\n  // see: https://arxiv.org/abs/1706.02515\n  float scaleAlpha = "+tf.backend_util.SELU_SCALEALPHA+";\n  float scale = "+tf.backend_util.SELU_SCALE+";\n  return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);\n";var selu=unaryKernelFunc({opSnippet:SELU});var seluConfig={kernelName:tf.Selu,backendName:"webgl",kernelFunc:selu};var SIGMOID="return 1.0 / (1.0 + exp(-1.0 * x));";var sigmoid=unaryKernelFunc({opSnippet:SIGMOID,packedOpSnippet:SIGMOID,cpuKernelImpl:sigmoidImplCPU});var sigmoidConfig={kernelName:tf.Sigmoid,backendName:"webgl",kernelFunc:sigmoid};var SIGN="\n  if (isnan(x)) { return 0.0; }\n  return sign(x);\n";var sign=unaryKernelFunc({opSnippet:SIGN});var signConfig={kernelName:tf.Sign,backendName:"webgl",kernelFunc:sign};var SIN=CHECK_NAN_SNIPPET_UNARY+"\n  return sin(x);\n";var sin=unaryKernelFunc({opSnippet:SIN});var sinConfig={kernelName:tf.Sin,backendName:"webgl",kernelFunc:sin};var SINH="\n  float e2x = exp(x);\n  return (e2x - 1.0 / e2x) / 2.0;\n";var sinh=unaryKernelFunc({opSnippet:SINH});var sinhConfig={kernelName:tf.Sinh,backendName:"webgl",kernelFunc:sinh};var SOFTPLUS="\n  float epsilon = 1.1920928955078125e-7;\n  float threshold = log(epsilon) + 2.0;\n\n  bool too_large = x > -threshold;\n  bool too_small = x < threshold;\n\n  float result;\n  float exp_x = exp(x);\n\n  if (too_large){\n    result = x;\n  }\n  else if (too_small){\n    result = exp_x;\n  }\n  else{\n    result = log(exp_x + 1.0);\n  }\n  return result;\n";var softplus=unaryKernelFunc({opSnippet:SOFTPLUS});var softplusConfig={kernelName:tf.Softplus,backendName:"webgl",kernelFunc:softplus};var spaceToBatchND=function(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var blockShape=attrs.blockShape,paddings=attrs.paddings;tf.util.assert(x.shape.length<=4,function(){return"spaceToBatchND for rank > 4 with a WebGL backend not "+"implemented yet"});var prod=blockShape.reduce(function(a,b){return a*b});var completePaddings=[[0,0]];completePaddings.push.apply(completePaddings,__spread(paddings));for(var i=1+blockShape.length;i<x.shape.length;++i){completePaddings.push([0,0])}var toDispose=[];var paddedX=padV2({inputs:{x:x},backend:backend,attrs:{paddings:completePaddings,constantValue:0}});var reshapedPaddedShape=tf.backend_util.getReshaped(paddedX.shape,blockShape,prod,false);var permutedReshapedPaddedPermutation=tf.backend_util.getPermuted(reshapedPaddedShape.length,blockShape.length,false);var flattenShape=tf.backend_util.getReshapedPermuted(paddedX.shape,blockShape,prod,false);var reshapedPaddedX=reshape({inputs:{x:paddedX},backend:backend,attrs:{shape:reshapedPaddedShape}});var paddedXT=transpose({inputs:{x:reshapedPaddedX},backend:backend,attrs:{perm:permutedReshapedPaddedPermutation}});var result=reshape({inputs:{x:paddedXT},backend:backend,attrs:{shape:flattenShape}});toDispose.push(paddedX);toDispose.push(reshapedPaddedX);toDispose.push(paddedXT);toDispose.forEach(function(t){return backend.disposeIntermediateTensorInfo(t)});return result};var spaceToBatchNDConfig={kernelName:tf.SpaceToBatchND,backendName:"webgl",kernelFunc:spaceToBatchND};function sparseFillEmptyRows(args){var inputs=args.inputs,backend=args.backend;var indices=inputs.indices,values=inputs.values,denseShape=inputs.denseShape,defaultValue=inputs.defaultValue;if(denseShape.shape.length!==1){throw new Error("Dense shape must be a vector, saw:\n         "+denseShape.shape)}if(indices.shape.length!==2){throw new Error("Indices must be a matrix, saw:\n         "+indices.shape)}if(values.shape.length!==1){throw new Error("Values must be a vector, saw:\n         "+values.shape)}if(defaultValue.shape.length!==0){throw new Error("Default value must be a scalar, saw:\n        "+defaultValue.shape)}var $indices=backend.readSync(indices.dataId);var $values=backend.readSync(values.dataId);var $denseShape=backend.readSync(denseShape.dataId);var $defaultValue=backend.readSync(defaultValue.dataId)[0];var _a=__read(sparseFillEmptyRowsImplCPU($indices,indices.shape,indices.dtype,$values,values.dtype,$denseShape,$defaultValue),5),outputIndices=_a[0],outputIndicesShape=_a[1],outputValues=_a[2],emptyRowIndicator=_a[3],reverseIndexMap=_a[4];return[backend.makeTensorInfo(outputIndicesShape,indices.dtype,outputIndices),backend.makeTensorInfo([outputIndicesShape[0]],values.dtype,outputValues),backend.makeTensorInfo([emptyRowIndicator.length],"bool",new Uint8Array(emptyRowIndicator.map(function(value){return Number(value)}))),backend.makeTensorInfo([reverseIndexMap.length],indices.dtype,new Int32Array(reverseIndexMap))]}var sparseFillEmptyRowsConfig={kernelName:tf.SparseFillEmptyRows,backendName:"webgl",kernelFunc:sparseFillEmptyRows};function sparseReshape(args){var inputs=args.inputs,backend=args.backend;var inputIndices=inputs.inputIndices,inputShape=inputs.inputShape,newShape=inputs.newShape;if(inputIndices.shape.length!==2){throw new Error("Input indices should be a matrix but received shape "+inputIndices.shape)}if(inputShape.shape.length!==1){throw new Error("Input shape should be a vector but received shape "+inputShape.shape)}if(newShape.shape.length!==1){throw new Error("Target shape should be a vector but received shape "+newShape.shape)}var $inputShape=Array.from(backend.readSync(inputShape.dataId));var $inputIndices=backend.readSync(inputIndices.dataId);var targetShape=Array.from(backend.readSync(newShape.dataId));var _a=__read(sparseReshapeImplCPU($inputIndices,inputIndices.shape,inputIndices.dtype,$inputShape,targetShape),3),newIndices=_a[0],indicesShape=_a[1],outputShape=_a[2];return[backend.makeTensorInfo(indicesShape,inputIndices.dtype,newIndices),backend.makeTensorInfo([outputShape.length],newShape.dtype,new Int32Array(outputShape))]}var sparseReshapeConfig={kernelName:tf.SparseReshape,backendName:"webgl",kernelFunc:sparseReshape};function sparseSegmentMean(args){var inputs=args.inputs,backend=args.backend;var data=inputs.data,indices=inputs.indices,segmentIds=inputs.segmentIds;if(data.shape.length<1){throw new Error("Data should be at least 1 dimensional but received scalar")}if(indices.shape.length!==1){throw new Error("Indices should be a vector but received shape\n              "+indices.shape)}if(segmentIds.shape.length!==1){throw new Error("Segment ids should be a vector but received shape\n              "+segmentIds.shape)}var $data=backend.readSync(data.dataId);var $indices=backend.readSync(indices.dataId);var $segmentIds=backend.readSync(segmentIds.dataId);var _a=__read(sparseSegmentReductionImplCPU($data,data.shape,data.dtype,$indices,$segmentIds,true),2),outputData=_a[0],outputDataShape=_a[1];return backend.makeTensorInfo(outputDataShape,data.dtype,outputData)}var sparseSegmentMeanConfig={kernelName:tf.SparseSegmentMean,backendName:"webgl",kernelFunc:sparseSegmentMean};function sparseSegmentSum(args){var inputs=args.inputs,backend=args.backend;var data=inputs.data,indices=inputs.indices,segmentIds=inputs.segmentIds;if(data.shape.length<1){throw new Error("Data should be at least 1 dimensional but received scalar")}if(indices.shape.length!==1){throw new Error("Indices should be a vector but received shape\n             "+indices.shape)}if(segmentIds.shape.length!==1){throw new Error("Segment ids should be a vector but received shape\n             "+segmentIds.shape)}var $data=backend.readSync(data.dataId);var $indices=backend.readSync(indices.dataId);var $segmentIds=backend.readSync(segmentIds.dataId);var _a=__read(sparseSegmentReductionImplCPU($data,data.shape,data.dtype,$indices,$segmentIds),2),outputData=_a[0],outputDataShape=_a[1];return backend.makeTensorInfo(outputDataShape,data.dtype,outputData)}var sparseSegmentSumConfig={kernelName:tf.SparseSegmentSum,backendName:"webgl",kernelFunc:sparseSegmentSum};function sparseToDense(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var sparseIndices=inputs.sparseIndices,sparseValues=inputs.sparseValues,defaultValue=inputs.defaultValue;var outputShape=attrs.outputShape;var _a=tf.backend_util.calculateShapes(sparseValues,sparseIndices,outputShape),sliceRank=_a.sliceRank,numUpdates=_a.numUpdates,strides=_a.strides,outputSize=_a.outputSize;var sumDupeIndices=false;var program=new ScatterProgram(numUpdates,sliceRank,sparseIndices.shape.length,sparseValues.shape.length,strides,[outputSize,1],sumDupeIndices);var res=backend.runWebGLProgram(program,[sparseValues,sparseIndices,defaultValue],sparseValues.dtype);var reshaped=reshape({inputs:{x:res},backend:backend,attrs:{shape:outputShape}});backend.disposeIntermediateTensorInfo(res);return reshaped}var sparseToDenseConfig={kernelName:tf.SparseToDense,backendName:"webgl",kernelFunc:sparseToDense};function splitV(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var numOrSizeSplits=attrs.numOrSizeSplits,axis=attrs.axis;var $axis=tf.util.parseAxisParam(axis,x.shape)[0];var splitSizes=tf.backend_util.prepareSplitSize(x,numOrSizeSplits,$axis);var xRank=x.shape.length;var begin=new Array(xRank).fill(0);var size=x.shape.slice();return splitSizes.map(function(s){var sliceSize=__spread(size);sliceSize[$axis]=s;var sliceT=slice({inputs:{x:x},backend:backend,attrs:{begin:begin,size:sliceSize}});begin[$axis]+=s;return sliceT})}var splitVConfig={kernelName:tf.SplitV,backendName:"webgl",kernelFunc:splitV};var SQRT="return sqrt(x);";var sqrt=unaryKernelFunc({opSnippet:SQRT,packedOpSnippet:SQRT,cpuKernelImpl:sqrtImplCPU});var sqrtConfig={kernelName:tf.Sqrt,backendName:"webgl",kernelFunc:sqrt};var SQUARE="return x * x;";var square=unaryKernelFunc({opSnippet:SQUARE});var squareConfig={kernelName:tf.Square,backendName:"webgl",kernelFunc:square};var SQUARED_DIFFERENCE="return (a - b) * (a - b);";var squaredDifference=binaryKernelFunc({opSnippet:SQUARED_DIFFERENCE,packedOpSnippet:SQUARED_DIFFERENCE});var squaredDifferenceConfig={kernelName:tf.SquaredDifference,backendName:"webgl",kernelFunc:squaredDifference};function step(_a){var inputs=_a.inputs,attrs=_a.attrs,backend=_a.backend;var x=inputs.x;var opSnippet=CHECK_NAN_SNIPPET$2+("\n    return x > 0.0 ? 1.0 : float("+attrs.alpha+");\n  ");var program=new UnaryOpProgram(x.shape,opSnippet);return backend.runWebGLProgram(program,[x],x.dtype)}var stepConfig={kernelName:tf.Step,backendName:"webgl",kernelFunc:step};var StridedSliceProgram=function(){function StridedSliceProgram(begin,strides,size){this.variableNames=["x"];this.outputShape=size;var rank=size.length;var inputDtype=getCoordsDataType(size.length);var dtype=getCoordsDataType(size.length);var newCoords="";if(rank===1){newCoords="coords * strides + begin"}else{var outputAxis_1=0;newCoords=size.map(function(_,i){outputAxis_1++;return size.length===1?"coords * strides["+i+"] + begin["+i+"]":"coords["+(outputAxis_1-1)+"] * strides["+i+"] + begin["+i+"]"}).join(",")}this.userCode="\n      "+inputDtype+" begin = "+inputDtype+"("+begin+");\n      "+inputDtype+" strides = "+inputDtype+"("+strides+");\n\n      void main() {\n        "+dtype+" coords = getOutputCoords();\n        setOutput(getX("+newCoords+"));\n      }\n    "}return StridedSliceProgram}();function stridedSlice(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var begin=attrs.begin,end=attrs.end,strides=attrs.strides,beginMask=attrs.beginMask,endMask=attrs.endMask,ellipsisMask=attrs.ellipsisMask,newAxisMask=attrs.newAxisMask,shrinkAxisMask=attrs.shrinkAxisMask;var _a=tf.slice_util.sliceInfo(x.shape,begin,end,strides,beginMask,endMask,ellipsisMask,newAxisMask,shrinkAxisMask),nonStrided=_a.nonStrided,$begin=_a.$begin,$strides=_a.$strides,size=_a.size,newShape=_a.newShape,outShape=_a.outShape;var $x=reshape({inputs:{x:x},backend:backend,attrs:{shape:newShape}});var result;if(nonStrided){var sliced=slice({inputs:{x:$x},backend:backend,attrs:{begin:$begin,size:size}});result=reshape({inputs:{x:sliced},backend:backend,attrs:{shape:outShape}});backend.disposeIntermediateTensorInfo(sliced)}else if(outShape.some(function(axis){return axis===0})){result=backend.makeTensorInfo(outShape,x.dtype,[])}else{var shouldExecuteOnCPU=backend.shouldExecuteOnCPU([$x]);if(shouldExecuteOnCPU){var xTexData=backend.texData.get($x.dataId);var values=xTexData.values;var xBuf=tf.buffer($x.shape,$x.dtype,values);var resultValues=stridedSliceImplCPU(outShape,xBuf,$strides,$begin);result=backend.makeTensorInfo(outShape,$x.dtype,resultValues.values)}else{var program=new StridedSliceProgram($begin,$strides,outShape);result=backend.runWebGLProgram(program,[$x],$x.dtype)}}var resultReshaped=reshape({inputs:{x:result},backend:backend,attrs:{shape:outShape}});backend.disposeIntermediateTensorInfo($x);backend.disposeIntermediateTensorInfo(result);return resultReshaped}var stridedSliceConfig={kernelName:tf.StridedSlice,backendName:"webgl",kernelFunc:stridedSlice};function stringNGrams(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var separator=attrs.separator,nGramWidths=attrs.nGramWidths,leftPad=attrs.leftPad,rightPad=attrs.rightPad,padWidth=attrs.padWidth,preserveShortSequences=attrs.preserveShortSequences;var data=inputs.data,dataSplits=inputs.dataSplits;var $data=backend.readSync(data.dataId);var $dataSplits=backend.readSync(dataSplits.dataId);var _a=__read(stringNGramsImplCPU($data,$dataSplits,separator,nGramWidths,leftPad,rightPad,padWidth,preserveShortSequences),2),nGrams=_a[0],nGramsSplits=_a[1];return[backend.makeTensorInfo([nGrams.length],"string",nGrams),backend.makeTensorInfo(dataSplits.shape,"int32",nGramsSplits)]}var stringNGramsConfig={kernelName:tf.StringNGrams,backendName:"webgl",kernelFunc:stringNGrams};function stringSplit(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var skipEmpty=attrs.skipEmpty;var input=inputs.input,delimiter=inputs.delimiter;if(input.dtype!=="string"){throw new Error("Input must be of datatype string")}if(input.shape.length!==1){throw new Error("Input must be a vector, got shape: "+input.shape)}if(delimiter.shape.length!==0){throw new Error("Delimiter must be a scalar, got shape: "+delimiter.shape)}var $input=backend.readSync(input.dataId);var $delimiter=backend.readSync(delimiter.dataId)[0];var _a=__read(stringSplitImplCPU($input,$delimiter,skipEmpty),3),indices=_a[0],values=_a[1],shape=_a[2];var outputSize=values.length;return[backend.makeTensorInfo([outputSize,2],"int32",indices),backend.makeTensorInfo([outputSize],"string",values),backend.makeTensorInfo([2],"int32",new Int32Array(shape))]}var stringSplitConfig={kernelName:tf.StringSplit,backendName:"webgl",kernelFunc:stringSplit};function stringToHashBucketFast(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var numBuckets=attrs.numBuckets;var input=inputs.input;if(input.dtype!=="string"){throw new Error("Input must be of datatype string")}if(numBuckets<=0){throw new Error("Number of buckets must be at least 1")}var $input=backend.readSync(input.dataId);var output=stringToHashBucketFastImplCPU($input,numBuckets);return backend.makeTensorInfo(input.shape,"int32",output)}var stringToHashBucketFastConfig={kernelName:tf.StringToHashBucketFast,backendName:"webgl",kernelFunc:stringToHashBucketFast};var TAN="return tan(x);";var tan=unaryKernelFunc({opSnippet:TAN});var tanConfig={kernelName:tf.Tan,backendName:"webgl",kernelFunc:tan};var TANH="\n  float e2x = exp(-2.0 * abs(x));\n  return sign(x) * (1.0 - e2x) / (1.0 + e2x);\n";var tanh=unaryKernelFunc({opSnippet:TANH});var tanhConfig={kernelName:tf.Tanh,backendName:"webgl",kernelFunc:tanh};var TileProgram=function(){function TileProgram(aShape,reps){this.variableNames=["A"];var outputShape=new Array(aShape.length);for(var i=0;i<outputShape.length;i++){outputShape[i]=aShape[i]*reps[i]}this.outputShape=outputShape;this.rank=outputShape.length;var dtype=getCoordsDataType(this.rank);var sourceCoords=getSourceCoords(aShape);this.userCode="\n      void main() {\n        "+dtype+" resRC = getOutputCoords();\n        setOutput(getA("+sourceCoords+"));\n      }\n    "}return TileProgram}();function getSourceCoords(aShape){var rank=aShape.length;if(rank>5){throw Error("Tile for rank "+rank+" is not yet supported")}if(rank===1){return"imod(resRC, "+aShape[0]+")"}var currentCoords=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"];var sourceCoords=[];for(var i=0;i<aShape.length;i++){sourceCoords.push("imod("+currentCoords[i]+", "+aShape[i]+")")}return sourceCoords.join()}function tile(params){var inputs=params.inputs,backend=params.backend,attrs=params.attrs;var x=inputs.x;var reps=attrs.reps;if(x.dtype==="string"||x.shape.length>5){var data=backend.readSync(x.dataId);var value=x.dtype==="string"?data.map(function(d){return tf.util.decodeString(d)}):data;var buf=tf.buffer(x.shape,x.dtype,value);var outBuf=tileImplCPU(buf,reps);return backend.makeTensorInfo(outBuf.shape,outBuf.dtype,outBuf.values)}var program=new TileProgram(x.shape,reps);var output=backend.runWebGLProgram(program,[x],x.dtype);return output}var tileConfig={kernelName:tf.Tile,backendName:"webgl",kernelFunc:tile};var SwapProgram=function(){function SwapProgram(shape){this.variableNames=["x","indices"];this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"negativeInf",type:"float"},{name:"dir",type:"int"},{name:"inc",type:"int"}];this.outputShape=shape;this.userCode="\n       void main() {\n         ivec2 coords = getOutputCoords();\n         int batch = coords[0];\n         int elemIdx = coords[1];\n\n         // We compare elements pair-wise within a group of size 2 * inc.\n         // The comparing rule for each group alternates between ascending\n         // and descending. Within each group, we compare each pair at\n         // positions i and i+inc. To decide whether an element at position i\n         // is x0 or x1, we mod it by 2 * inc, if the result is smaller than\n         // inc, it is in the first half of the group, we denote it as x0,\n         // otherwise we denote it as x1.\n         // For example, as shown in the Bitonic top K paper referenced above,\n         // Figure5(a) shows that element[1] is in the\n         // second half of the group when group size is 2, but it is in the\n         // first half of the group when group size is 4.\n\n         bool isFirstInPair = imod(elemIdx, 2 * inc) < inc;\n         int i = isFirstInPair ? elemIdx : elemIdx - inc;\n\n         int i0 = firstPass == 1 ? i : int(getIndices(batch, i));\n         int i1 = firstPass == 1 ? i + inc : int(getIndices(batch, i + inc));\n         float x0 = i0 < n ? getX(batch, i0) : negativeInf;\n         float x1 = i1 < n ? getX(batch, i1) : negativeInf;\n\n         // Denotes which direction indices are in (ascending or descending).\n         bool reverse = imod(elemIdx, 2 * dir) >= dir;\n         bool isGreater = x0 > x1 || (x0 == x1 && i1 > i0);\n         if (reverse == isGreater) { // Elements in opposite order of direction\n           int iTemp = i0;\n           i0 = i1;\n           i1 = iTemp;\n         }\n         if (isFirstInPair) {\n            setOutput(float(i0));\n         } else {\n            setOutput(float(i1));\n         }\n       }\n     "}return SwapProgram}();var MergeProgram=function(){function MergeProgram(shape){this.variableNames=["x","indices"];this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"k",type:"int"}];this.outputShape=shape;this.userCode="\n    void main() {\n         // Takes max of indices (0, k), (1, k + 1), (2, k + 2) ...\n         ivec2 coords = getOutputCoords();\n         int batch = coords[0];\n         int elemIdx = coords[1];\n\n         // The output size is half of the previous size.\n         // If the previous sequence is | | | | _ _ _ _  | | | |  _ _ _ _ (k=4),\n         // we only need to output the indices at positions |, the indices at\n         // positions _ can be thrown away, see Figure5(b) After Phase 2\n         // (Merge phase) in the Bitonic Top K paper referenced above.\n         // For example, the paper shows we only need to output the orange bars.\n         // The output sequence should look like this | | | | | | | |.\n         // Because the sequence is halved, to map the output index back\n         // to the previous sequence to find the corresponding value,\n         // we need to double the index. When we double the index,\n         // we basically interpolate a position, so 2i looks like\n         // | _ | _ | _ | _ | _ | _ | _. We move the | to the first k position\n         // of each 2k positions by - elemIdx % k. E.g. for output at\n         // index 4,5,6,7, we want to get the corresponding element at\n         // original index 8,9,10,11, for output at index 8,9,10,11,\n         // we want to get the corresponding element at original index\n         // 16,17,18,19, so on and so forth.\n\n         int i = elemIdx < k ? elemIdx : (elemIdx * 2 - imod(elemIdx, k));\n         int i0 = firstPass == 1 ? i : int(getIndices(batch, i));\n         int i1 = firstPass == 1 ? i + k : int(getIndices(batch, i + k));\n\n         float x0 = getX(batch, i0);\n         float x1 = i1 < n ? getX(batch, i1) : x0;\n\n         setOutput(x0 >= x1 ? float(i0) : float(i1));\n       }\n     "}return MergeProgram}();function disposeIntermediateTensorInfoOrNull(backend,tensorInfo){if(tensorInfo!==null){backend.disposeIntermediateTensorInfo(tensorInfo)}}function roundUpToPow2(num){var pow2=1;while(pow2<num){pow2*=2}return pow2}function topK(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x;var k=attrs.k,sorted=attrs.sorted;var TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD=tf.env().getNumber("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD");var TOPK_K_CPU_HANDOFF_THRESHOLD=tf.env().getNumber("TOPK_K_CPU_HANDOFF_THRESHOLD");var xShape=x.shape;var lastDim=xShape[xShape.length-1];if(backend.shouldExecuteOnCPU([x])||lastDim<TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD||k>TOPK_K_CPU_HANDOFF_THRESHOLD){var xVals=backend.readSync(x.dataId);var _a=__read(topKImplCPU(xVals,xShape,x.dtype,k,sorted),2),allTopKVals=_a[0],allTopKIndices=_a[1];return[backend.makeTensorInfo(allTopKVals.shape,allTopKVals.dtype,allTopKVals.values),backend.makeTensorInfo(allTopKIndices.shape,allTopKIndices.dtype,allTopKIndices.values)]}if(k===0){xShape[xShape.length-1]=0;return[backend.makeTensorInfo(xShape,x.dtype,[]),backend.makeTensorInfo(xShape,"int32",[])]}if(lastDim===1){return[x,fill({attrs:{shape:xShape,dtype:"int32",value:0},backend:backend})]}var xtexData=backend.texData.get(x.dataId);var xIsPacked=xtexData!==null&&xtexData.isPacked;var xUnPacked=xIsPacked?backend.unpackTensor(x):x;var xSize=tf.util.sizeFromShape(xShape);var batch=xSize/lastDim;var x2D=reshape({inputs:{x:xUnPacked},attrs:{shape:[batch,lastDim]},backend:backend});if(xIsPacked){disposeIntermediateTensorInfoOrNull(backend,xUnPacked)}var kPow2=roundUpToPow2(k);var lastDimPow2=roundUpToPow2(lastDim);var indices=null;var getInputs=function(){return indices===null?[x2D,x2D]:[x2D,indices]};var runSwap=function(dir,inc,shape){var inputs=getInputs();var program=new SwapProgram(shape);var fistPass=indices===null?1:0;var customValues=[[lastDim],[fistPass],[Number.NEGATIVE_INFINITY],[dir],[inc]];var prevIndices=indices;indices=backend.runWebGLProgram(program,inputs,"int32",customValues);disposeIntermediateTensorInfoOrNull(backend,prevIndices)};for(var len=1;len<kPow2;len*=2){var dir=len*2;for(var inc=len;inc>=1;inc/=2){runSwap(dir,inc,[batch,lastDimPow2])}}for(var indicesSize=lastDimPow2;indicesSize>kPow2;indicesSize/=2){var inputs_1=getInputs();var mergeProgram=new MergeProgram([batch,indicesSize/2]);var firstPass=indices===null?1:0;var customValues=[[lastDim],[firstPass],[kPow2]];var prevIndices_1=indices;indices=backend.runWebGLProgram(mergeProgram,inputs_1,"int32",customValues);disposeIntermediateTensorInfoOrNull(backend,prevIndices_1);var len=kPow2/2;var dir=len*2;for(var inc=len;inc>=1;inc/=2){runSwap(dir,inc,indices.shape)}}var prevIndices=indices;indices=slice({inputs:{x:indices},backend:backend,attrs:{begin:0,size:[batch,k]}});disposeIntermediateTensorInfoOrNull(backend,prevIndices);var values=gatherV2({inputs:{x:x2D,indices:indices},backend:backend,attrs:{axis:1,batchDims:1}});disposeIntermediateTensorInfoOrNull(backend,x2D);var newShape=xShape.slice(0,-1);newShape.push(k);prevIndices=indices;indices=reshape({inputs:{x:indices},attrs:{shape:newShape},backend:backend});disposeIntermediateTensorInfoOrNull(backend,prevIndices);var prevValues=values;values=reshape({inputs:{x:values},attrs:{shape:newShape},backend:backend});disposeIntermediateTensorInfoOrNull(backend,prevValues);return[values,indices]}var topKConfig={kernelName:tf.TopK,backendName:"webgl",kernelFunc:topK};var TransformProgram=function(){function TransformProgram(imageHeight,imageWidth,interpolation,fillMode,fillValue,outShape){this.variableNames=["Image","Transforms"];this.outputShape=outShape;var interpolationModeId=interpolation==="nearest"?1:2;var fillModeId;switch(fillMode){case"constant":fillModeId=1;break;case"reflect":fillModeId=2;break;case"wrap":fillModeId=3;break;case"nearest":fillModeId=4;break;default:fillModeId=1;break}this.userCode="\n            float mapCoord(float outCoord, float len) {\n              float inCoord = outCoord;\n              if("+fillModeId+" == 2) {\n                if (inCoord < 0.0) {\n                  if (len <= 1.0) {\n                    inCoord = 0.0;\n                  } else {\n                    float sz2 = 2.0 * len;\n                    if (inCoord < sz2) {\n                      inCoord = sz2 * float(int(float(-inCoord / sz2))) +\n                      inCoord;\n                    }\n                    inCoord = inCoord < -len ? inCoord + sz2 : -inCoord - 1.0;\n                  }\n                } else if (inCoord > len - 1.0) {\n                  if (len <= 1.0) {\n                    inCoord = 0.0;\n                  } else {\n                    float sz2 = 2.0 * len;\n                    inCoord -= sz2 * float(int(float(inCoord / sz2)));\n                    if (inCoord >= len) {\n                      inCoord = sz2 - inCoord - 1.0;\n                    }\n                  }\n                }\n                return clamp(inCoord, 0.0, len - 1.0);\n              } else if ("+fillModeId+" == 3) {\n                if (inCoord < 0.0) {\n                  if (len <= 1.0) {\n                    inCoord = 0.0;\n                  } else {\n                    float sz = len - 1.0;\n                    inCoord += len * (float(int(float(-inCoord / sz))) + 1.0);\n                  }\n                } else if (inCoord > len - 1.0) {\n                  if (len <= 1.0) {\n                    inCoord = 0.0;\n                  } else {\n                    float sz = len - 1.0;\n                    inCoord -= len * float(int(float(inCoord / sz)));\n                  }\n                }\n                return clamp(inCoord, 0.0, len - 1.0);\n              } else if ("+fillModeId+" == 4) {\n                return clamp(outCoord, 0.0, len - 1.0);\n              } else {\n                return outCoord;\n              }\n            }\n\n            float readWithFillValue(int batch, int coordY, int coordX,\n              int channel) {\n              float outputValue;\n              if (0 <= coordY && coordY < "+imageHeight+" && 0 <= coordX && coordX < "+imageWidth+") {\n                  outputValue = getImage(batch, coordY, coordX, channel);\n              } else {\n                outputValue = float("+fillValue+");\n              }\n              return outputValue;\n            }\n\n            void main() {\n              ivec4 coords = getOutputCoords();\n              float outputValue;\n              int batch = coords[0];\n              int x = coords[2];\n              int y = coords[1];\n              int channel = coords[3];\n              float xf = float(x);\n              float yf = float(y);\n              float a1 = getTransforms(batch, 0);\n              float a2 = getTransforms(batch, 1);\n              float a3 = getTransforms(batch, 2);\n              float b1 = getTransforms(batch, 3);\n              float b2 = getTransforms(batch, 4);\n              float b3 = getTransforms(batch, 5);\n              float c1 = getTransforms(batch, 6);\n              float c2 = getTransforms(batch, 7);\n              float projection = c1 * xf + c2 * yf + 1.0;\n              if (projection == 0.0) {\n                outputValue = float("+fillValue+");\n              } else {\n                float inX = (a1 * xf + a2 * yf + a3) / projection;\n                float inY = (b1 * xf + b2 * yf + b3) / projection;\n                float mapX = mapCoord(inX, float("+imageWidth+"));\n                float mapY = mapCoord(inY, float("+imageHeight+"));\n\n                if ("+interpolationModeId+" == 1) {\n                  int coordY = int(round(mapY));\n                  int coordX = int(round(mapX));\n                  outputValue = readWithFillValue(batch, coordY, coordX,\n                    channel);\n                } else {\n                  float yFloor = floor(mapY);\n                  float xFloor = floor(mapX);\n                  float yCeil = yFloor + 1.0;\n                  float xCeil = xFloor + 1.0;\n                  float valueYFloor = (xCeil - mapX) *\n                  readWithFillValue(batch, int(yFloor), int(xFloor), channel) +\n                  (mapX - xFloor) *\n                  readWithFillValue(batch, int(yFloor), int(xCeil), channel);\n                  float valueYCeil = (xCeil - mapX) *\n                  readWithFillValue(batch, int(yCeil), int(xFloor), channel) +\n                  (mapX - xFloor) *\n                  readWithFillValue(batch, int(yCeil), int(xCeil), channel);\n                  outputValue = (yCeil - mapY) * valueYFloor +\n                  (mapY - yFloor) * valueYCeil;\n                }\n              }\n              setOutput(outputValue);\n            }\n        "}return TransformProgram}();function transform(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var image=inputs.image,transforms=inputs.transforms;var interpolation=attrs.interpolation,fillMode=attrs.fillMode,fillValue=attrs.fillValue,outputShape=attrs.outputShape;var _a=__read(image.shape,4),batch=_a[0],imageHeight=_a[1],imageWidth=_a[2],numChannels=_a[3];var _b=__read(outputShape!=null?outputShape:[imageHeight,imageWidth],2),outHeight=_b[0],outWidth=_b[1];var outShape=[batch,outHeight,outWidth,numChannels];var program=new TransformProgram(imageHeight,imageWidth,interpolation,fillMode,fillValue,outShape);return backend.runWebGLProgram(program,[image,transforms],"float32")}var transformConfig={kernelName:tf.Transform,backendName:"webgl",kernelFunc:transform};function unique(args){var inputs=args.inputs,attrs=args.attrs,backend=args.backend;var axis=attrs.axis;var x=inputs.x;assertNotComplex(x,"unique");console.warn("WARNING: ","UI might be locked temporarily as data is being downloaded");var values=backend.readSync(x.dataId);var _a=uniqueImplCPU(values,axis,x.shape,x.dtype),outputValues=_a.outputValues,outputShape=_a.outputShape,indices=_a.indices;return[backend.makeTensorInfo(outputShape,x.dtype,outputValues),backend.makeTensorInfo([indices.length],"int32",indices)]}var uniqueConfig={kernelName:tf.Unique,backendName:"webgl",kernelFunc:unique};function unpack(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var value=inputs.value;var axis=attrs.axis;if(axis<0){axis+=value.shape.length}var x=value;var xRank=x.shape.length;var num=value.shape[axis];var outShape=new Array(xRank-1);var outIndex=0;for(var i=0;i<xRank;i++){if(i!==axis){outShape[outIndex++]=x.shape[i]}}var toDispose=[];var begin=new Array(xRank).fill(0);var size=x.shape.slice();size[axis]=1;var res=new Array(num);for(var i=0;i<res.length;i++){begin[axis]=i;var sliced=slice({inputs:{x:x},backend:backend,attrs:{begin:begin,size:size}});var reshaped=reshape({inputs:{x:sliced},backend:backend,attrs:{shape:outShape}});res[i]=reshaped;toDispose.push(sliced)}toDispose.forEach(function(t){return backend.disposeIntermediateTensorInfo(t)});return res}var unpackConfig={kernelName:tf.Unpack,backendName:"webgl",kernelFunc:unpack};var SegmentOpProgram=function(){function SegmentOpProgram(segOpInfo,segOpType){this.variableNames=["x","segmentIds"];var windowSize=segOpInfo.windowSize;var batchSize=segOpInfo.batchSize;var inSize=segOpInfo.inSize;var numSegments=segOpInfo.numSegments;var outSize=numSegments*Math.ceil(inSize/windowSize);this.outputShape=[batchSize,outSize];var initializationValue="0.0";var returnValue="sumValue";var windowSizeNearestVec4=Math.floor(windowSize/4)*4;var windowSizeVec4Remainder=windowSize%4;var updateSnippet="\n        sumValue += dot(values, segFilter);\n    ";var checkValueOutOfBounds="";if(inSize%windowSize>0){checkValueOutOfBounds="\n        if (inIdx < 0 || inIdx >= "+inSize+") {\n          return initializationValue;\n        }\n      "}var checkSegmentIdOutOfBounds="";if(inSize%windowSize>0){checkSegmentIdOutOfBounds="\n        if (inIdx < 0 || inIdx >= "+inSize+") {\n          return -1.0;\n        }\n      "}this.userCode="\n      const float initializationValue = "+initializationValue+";\n\n      float getValue(int batch, int inIdx) {\n        "+checkValueOutOfBounds+"\n        return getX(batch, inIdx);\n      }\n\n      float getSegmentIdAtIndex(int inIdx) {\n        "+checkSegmentIdOutOfBounds+"\n        return getSegmentIds(inIdx);\n      }\n\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int batch = coords[0];\n        int outIdx = coords[1];\n        int inOffset = int(floor(float(outIdx) / float(\n          "+numSegments+")) * float("+windowSize+"));\n        int currentSeg = int(mod(float(outIdx), float("+numSegments+")));\n\n        float sumValue = 0.0;\n\n        for (int i = 0; i < "+windowSizeNearestVec4+"; i += 4) {\n          int inIdx = inOffset + i;\n          vec4 values = vec4(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            getValue(batch, inIdx + 2),\n            getValue(batch, inIdx + 3)\n          );\n\n          vec4 segFilter = vec4(\n            int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0\n          );\n\n          "+updateSnippet+"\n        }\n\n        int inIdx = inOffset + "+windowSizeNearestVec4+";\n        if ("+(windowSizeVec4Remainder===1)+") {\n          vec4 values = vec4(\n            getValue(batch, inIdx),\n            initializationValue,\n            initializationValue,\n            initializationValue\n          );\n\n          int inIdxSeg = int(getSegmentIdAtIndex(inIdx));\n\n          vec4 segFilter = vec4(\n            int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n            0,\n            0,\n            0\n          );\n\n          "+updateSnippet+"\n        } else if ("+(windowSizeVec4Remainder===2)+") {\n          vec4 values = vec4(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            initializationValue,\n            initializationValue\n          );\n\n          vec4 segFilter = vec4(\n            int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n              0,\n              0\n          );\n\n          "+updateSnippet+"\n        } else if ("+(windowSizeVec4Remainder===3)+") {\n          vec4 values = vec4(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            getValue(batch, inIdx + 2),\n            initializationValue\n          );\n\n          vec4 segFilter = vec4(\n            int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n            0\n          );\n\n          "+updateSnippet+"\n        }\n        setOutput("+returnValue+");\n      }\n    "}return SegmentOpProgram}();function unsortedSegmentSum(args){var inputs=args.inputs,backend=args.backend,attrs=args.attrs;var x=inputs.x,segmentIds=inputs.segmentIds;var numSegments=attrs.numSegments;var xRank=x.shape.length;var toDispose=[];var axis=0;var permutation=tf.backend_util.getAxesPermutation([axis],xRank);var permutedX=x;if(permutation!=null){permutedX=transpose({inputs:{x:x},backend:backend,attrs:{perm:permutation}});toDispose.push(permutedX);axis=tf.backend_util.getInnerMostAxes(1,xRank)[0]}var outShape=tf.backend_util.segment_util.computeOutShape(permutedX.shape,axis,numSegments);var inSize=tf.util.sizeFromShape([permutedX.shape[axis]]);var a2D=reshape({inputs:{x:permutedX},backend:backend,attrs:{shape:[-1,inSize]}});toDispose.push(a2D);var outputDType=tf.sumOutType(x.dtype);var segOpCompute=function(x,segOpType,segmentIds,dtype,numSegments){var batchSize=x.shape[0];var inSize=x.shape[1];var windowSize=tf.backend_util.segment_util.segOpComputeOptimalWindowSize(inSize,numSegments);var segOpInfo={windowSize:windowSize,inSize:inSize,batchSize:batchSize,numSegments:numSegments};var program=new SegmentOpProgram(segOpInfo,segOpType);var output=backend.compileAndRun(program,[x,segmentIds],dtype);toDispose.push(output);if(output.shape[1]===numSegments){return output}var rangeInfo=range({backend:backend,attrs:{start:0,stop:numSegments,step:1,dtype:"float32"}});var tileInfo=tile({inputs:{x:rangeInfo},backend:backend,attrs:{reps:[inSize/windowSize]}});toDispose.push(rangeInfo);toDispose.push(tileInfo);var result=segOpCompute(output,segOpType,tileInfo,dtype,numSegments);return result};var segOpResult=segOpCompute(a2D,"unsortedSegmentSum",segmentIds,outputDType,numSegments);var reshaped=reshape({inputs:{x:segOpResult},backend:backend,attrs:{shape:outShape}});var result=reshaped;if(permutation!=null){toDispose.push(reshaped);var perm=tf.backend_util.getUndoAxesPermutation(permutation);result=transpose({inputs:{x:result},backend:backend,attrs:{perm:perm}})}toDispose.forEach(function(t){return backend.disposeIntermediateTensorInfo(t)});return result}var unsortedSegmentSumConfig={kernelName:tf.UnsortedSegmentSum,backendName:"webgl",kernelFunc:unsortedSegmentSum};var e_1,_a;var kernelConfigs=[LRNConfig,LRNGradConfig,_fusedMatMulConfig,absConfig,acosConfig,acoshConfig,addConfig,addNConfig,allConfig,anyConfig,argMaxConfig,argMinConfig,asinConfig,asinhConfig,atan2Config,atanConfig,atanhConfig,avgPool3DConfig,avgPoolConfig,avgPoolGrad3DConfig,avgPoolGradConfig,batchMatMulConfig,batchNormConfig,batchToSpaceNDConfig,bincountConfig,broadcastArgsConfig,castConfig,ceilConfig,clipByValueConfig,complexAbsConfig,complexConfig,concatConfig,conv2DBackpropFilterConfig,conv2DBackpropInputConfig,conv2DConfig,conv3DBackpropFilterV2Config,conv3DBackpropInputConfig,conv3DConfig,cosConfig,coshConfig,cropAndResizeConfig,cumsumConfig,denseBincountConfig,depthToSpaceConfig,depthwiseConv2dNativeBackpropFilterConfig,depthwiseConv2dNativeBackpropInputConfig,depthwiseConv2dNativeConfig,diagConfig,dilation2DConfig,einsumConfig,eluConfig,eluGradConfig,equalConfig,erfConfig,expConfig,expandDimsConfig,expm1Config,fftConfig,fillConfig,flipLeftRightConfig,floorConfig,floorDivConfig,fromPixelsConfig,fusedConv2DConfig,fusedDepthwiseConv2DConfig,gatherNdConfig,gatherV2Config,greaterConfig,greaterEqualConfig,identityConfig,ifftConfig,imagConfig,isFiniteConfig,isInfConfig,isNaNConfig,leakyReluConfig,lessConfig,lessEqualConfig,linSpaceConfig,log1pConfig,logConfig,logicalAndConfig,logicalNotConfig,logicalOrConfig,maxConfig,maxPool3DConfig,maxPoolConfig,maxPoolGrad3DConfig,maxPoolGradConfig,maxPoolWithArgmaxConfig,maximumConfig,meanConfig,minConfig,minimumConfig,mirrorPadConfig,modConfig,multinomialConfig,multiplyConfig,negConfig,nonMaxSuppressionV3Config,nonMaxSuppressionV4Config,nonMaxSuppressionV5Config,notEqualConfig,oneHotConfig,onesLikeConfig,packConfig,padV2Config,powConfig,preluConfig,prodConfig,rangeConfig,realConfig,realDivConfig,reciprocalConfig,relu6Config,reluConfig,reshapeConfig,resizeBilinearConfig,resizeBilinearGradConfig,resizeNearestNeighborConfig,resizeNearestNeighborGradConfig,reverseConfig,rotateWithOffsetConfig,roundConfig,rsqrtConfig,scatterNdConfig,selectConfig,seluConfig,sigmoidConfig,signConfig,sinConfig,sinhConfig,sliceConfig,softmaxConfig,softplusConfig,spaceToBatchNDConfig,sparseFillEmptyRowsConfig,sparseReshapeConfig,sparseSegmentMeanConfig,sparseSegmentSumConfig,sparseToDenseConfig,splitVConfig,sqrtConfig,squareConfig,squaredDifferenceConfig,stepConfig,stridedSliceConfig,stringNGramsConfig,stringSplitConfig,stringToHashBucketFastConfig,subConfig,sumConfig,tanConfig,tanhConfig,tileConfig,topKConfig,transformConfig,transposeConfig,uniqueConfig,unpackConfig,unsortedSegmentSumConfig,zerosLikeConfig];try{for(var kernelConfigs_1=__values(kernelConfigs),kernelConfigs_1_1=kernelConfigs_1.next();!kernelConfigs_1_1.done;kernelConfigs_1_1=kernelConfigs_1.next()){var kernelConfig=kernelConfigs_1_1.value;tf.registerKernel(kernelConfig)}}catch(e_1_1){e_1={error:e_1_1}}finally{try{if(kernelConfigs_1_1&&!kernelConfigs_1_1.done&&(_a=kernelConfigs_1.return))_a.call(kernelConfigs_1)}finally{if(e_1)throw e_1.error}}exports.GPGPUContext=GPGPUContext;exports.MathBackendWebGL=MathBackendWebGL;exports.forceHalfFloat=forceHalfFloat;exports.gpgpu_util=gpgpu_util;exports.setWebGLContext=setWebGLContext;exports.version_webgl=version;exports.webgl=webgl;exports.webgl_util=webgl_util},{"@tensorflow/tfjs-core":35}],34:[function(require,module,exports){(function(process,global,Buffer){(function(){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var tfc=require("@tensorflow/tfjs-core");function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=="default"){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}})}})}n["default"]=e;return n}var tfc__namespace=_interopNamespace(tfc);var extendStatics=function(d,b){extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b}||function(d,b){for(var p in b)if(b.hasOwnProperty(p))d[p]=b[p]};return extendStatics(d,b)};function __extends(d,b){extendStatics(d,b);function __(){this.constructor=d}d.prototype=b===null?Object.create(b):(__.prototype=b.prototype,new __)}function __awaiter(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P(function(resolve){resolve(value)})}return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator["throw"](value))}catch(e){reject(e)}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})}function __generator(thisArg,body){var _={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]},f,y,t,g;return g={next:verb(0),throw:verb(1),return:verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}function __values(o){var s=typeof Symbol==="function"&&Symbol.iterator,m=s&&o[s],i=0;if(m)return m.call(o);if(o&&typeof o.length==="number")return{next:function(){if(o&&i>=o.length)o=void 0;return{value:o&&o[i++],done:!o}}};throw new TypeError(s?"Object is not iterable.":"Symbol.iterator is not defined.")}function __read(o,n){var m=typeof Symbol==="function"&&o[Symbol.iterator];if(!m)return o;var i=m.call(o),r,ar=[],e;try{while((n===void 0||n-- >0)&&!(r=i.next()).done)ar.push(r.value)}catch(error){e={error:error}}finally{try{if(r&&!r.done&&(m=i["return"]))m.call(i)}finally{if(e)throw e.error}}return ar}function __spread(){for(var ar=[],i=0;i<arguments.length;i++)ar=ar.concat(__read(arguments[i]));return ar}var DataType;(function(DataType){DataType[DataType["DT_INVALID"]=0]="DT_INVALID";DataType[DataType["DT_FLOAT"]=1]="DT_FLOAT";DataType[DataType["DT_DOUBLE"]=2]="DT_DOUBLE";DataType[DataType["DT_INT32"]=3]="DT_INT32";DataType[DataType["DT_UINT8"]=4]="DT_UINT8";DataType[DataType["DT_INT16"]=5]="DT_INT16";DataType[DataType["DT_INT8"]=6]="DT_INT8";DataType[DataType["DT_STRING"]=7]="DT_STRING";DataType[DataType["DT_COMPLEX64"]=8]="DT_COMPLEX64";DataType[DataType["DT_INT64"]=9]="DT_INT64";DataType[DataType["DT_BOOL"]=10]="DT_BOOL";DataType[DataType["DT_QINT8"]=11]="DT_QINT8";DataType[DataType["DT_QUINT8"]=12]="DT_QUINT8";DataType[DataType["DT_QINT32"]=13]="DT_QINT32";DataType[DataType["DT_BFLOAT16"]=14]="DT_BFLOAT16";DataType[DataType["DT_FLOAT_REF"]=101]="DT_FLOAT_REF";DataType[DataType["DT_DOUBLE_REF"]=102]="DT_DOUBLE_REF";DataType[DataType["DT_INT32_REF"]=103]="DT_INT32_REF";DataType[DataType["DT_UINT8_REF"]=104]="DT_UINT8_REF";DataType[DataType["DT_INT16_REF"]=105]="DT_INT16_REF";DataType[DataType["DT_INT8_REF"]=106]="DT_INT8_REF";DataType[DataType["DT_STRING_REF"]=107]="DT_STRING_REF";DataType[DataType["DT_COMPLEX64_REF"]=108]="DT_COMPLEX64_REF";DataType[DataType["DT_INT64_REF"]=109]="DT_INT64_REF";DataType[DataType["DT_BOOL_REF"]=110]="DT_BOOL_REF";DataType[DataType["DT_QINT8_REF"]=111]="DT_QINT8_REF";DataType[DataType["DT_QUINT8_REF"]=112]="DT_QUINT8_REF";DataType[DataType["DT_QINT32_REF"]=113]="DT_QINT32_REF";DataType[DataType["DT_BFLOAT16_REF"]=114]="DT_BFLOAT16_REF"})(DataType||(DataType={}));var SaverDef;(function(SaverDef){(function(CheckpointFormatVersion){CheckpointFormatVersion[CheckpointFormatVersion["LEGACY"]=0]="LEGACY";CheckpointFormatVersion[CheckpointFormatVersion["V1"]=1]="V1";CheckpointFormatVersion[CheckpointFormatVersion["V2"]=2]="V2"})(SaverDef.CheckpointFormatVersion||(SaverDef.CheckpointFormatVersion={}))})(SaverDef||(SaverDef={}));var CUSTOM_OPS={};function registerOp(name,opFunc){var opMapper={tfOpName:name,category:"custom",inputs:[],attrs:[],customExecutor:opFunc};CUSTOM_OPS[name]=opMapper}function getRegisteredOp(name){return CUSTOM_OPS[name]}function deregisterOp(name){delete CUSTOM_OPS[name]}function getParamValue(paramName,node,tensorMap,context,resourceManager){var inputParam=node.inputParams[paramName];if(inputParam&&inputParam.inputIndexStart!==undefined){var start=inputParam.inputIndexStart;var end=inputParam.inputIndexEnd===0?undefined:inputParam.inputIndexEnd===undefined?start+1:inputParam.inputIndexEnd;if(inputParam.type==="tensor"){return getTensor(node.inputNames[inputParam.inputIndexStart],tensorMap,context,resourceManager)}if(inputParam.type==="tensors"){var inputs=node.inputNames.slice(start,end);return inputs.map(function(name){return getTensor(name,tensorMap,context,resourceManager)})}var tensor=getTensor(node.inputNames.slice(start)[0],tensorMap,context,resourceManager);var data=tensor.dataSync();return inputParam.type==="number"?data[0]:tfc.util.toNestedArray(tensor.shape,data)}var attrParam=node.attrParams[paramName];return attrParam&&attrParam.value}function getTensor(name,tensorsMap,context,resourceManager){var _a=__read(parseNodeName(name),2),nodeName=_a[0],index=_a[1];if(resourceManager!=null){var tensor=resourceManager.getHashTableHandleByName(nodeName);if(tensor!=null){return tensor}}var contextId=context.currentContextIds.find(function(contextId){return!!tensorsMap[getNodeNameWithContextId(nodeName,contextId)]});return contextId!==undefined?tensorsMap[getNodeNameWithContextId(nodeName,contextId)][index]:undefined}function getTensorsForCurrentContenxt(name,tensorsMap,context){return tensorsMap[getNodeNameWithContextId(name,context.currentContextId)]}function getNodeNameAndIndex(inputName,context){var _a=__read(parseNodeName(inputName),3),nodeName=_a[0],index=_a[1],outputName=_a[2];return[getNodeNameWithContextId(nodeName,context&&context.currentContextId),index,outputName]}function getNodeNameWithContextId(name,contextId){return!!contextId?name+"-"+contextId:name}function parseNodeName(name){var parts=name.split(":");if(parts.length===1){return[name,0,undefined]}var nodeName=parts[0];var outputName=parts.length===3?parts[1]:undefined;var index=Number(parts[parts.length-1]);return[nodeName,index,outputName]}function getPadding(node,tensorMap,context){var pad=getParamValue("pad",node,tensorMap,context);if(pad==="explicit"){pad=getParamValue("explicitPaddings",node,tensorMap,context);var explicitPadding=[[0,0],[0,0],[0,0],[0,0]];for(var i=0;i<4;i++){explicitPadding[i][0]=pad[i*2];explicitPadding[i][1]=pad[i*2+1]}return explicitPadding}return pad}function cloneTensor(tensor){return tensor.kept?tensor:tfc.clone(tensor)}var json$i=[{tfOpName:"Add",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"AddV2",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"AddN",category:"arithmetic",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"BiasAdd",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:true}]},{tfOpName:"Sub",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"RealDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Div",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"DivNoNan",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"FloorDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Mul",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Maximum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Minimum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Pow",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"SquaredDifference",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Mod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"FloorMod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]}];var arithmetic={__proto__:null,json:json$i};var json$h=[{tfOpName:"Abs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Acos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Asin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Atan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Atan2",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Ceil",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"ClipByValue",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"clipValueMin",type:"number"},{start:2,name:"clipValueMax",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Complex",category:"basic_math",inputs:[{start:0,name:"real",type:"tensor"},{start:1,name:"imag",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"ComplexAbs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Cos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Cosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Elu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Exp",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Floor",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Log",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Imag",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:true}]},{tfOpName:"Neg",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Real",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:true}]},{tfOpName:"Prelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"alpha",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Relu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Relu6",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Selu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Sigmoid",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Sin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Sinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Sqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Rsqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Square",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Tan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Tanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Sign",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Round",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Expm1",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Log1p",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Reciprocal",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Softplus",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Asinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Acosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Atanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Erf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Prod",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axes",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",notSupported:true},{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"LeakyRelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"alpha",name:"alpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"IsNan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]}];var basicMath={__proto__:null,json:json$h};var json$g=[{tfOpName:"EmptyTensorList",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"maxNumElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"LoopCond",category:"control",inputs:[{start:0,name:"pred",type:"tensor"}]},{tfOpName:"Switch",category:"control",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"pred",type:"tensor"}]},{tfOpName:"Merge",category:"control",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"Enter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true},{tfName:"frame_name",name:"frameName",type:"string"},{tfName:"is_constant",name:"isConstant",type:"bool"}]},{tfOpName:"Exit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"NextIteration",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"TensorArrayV3",category:"control",inputs:[{start:0,name:"size",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"dynamic_size",name:"dynamicSize",type:"bool"},{tfName:"clear_after_read",name:"clearAfterRead",type:"bool"},{tfName:"identical_element_shapes",name:"identicalElementShapes",type:"bool"},{tfName:"tensor_array_name",name:"name",type:"string"}]},{tfOpName:"TensorArrayWriteV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"TensorArrayReadV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"TensorArrayGatherV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"}]},{tfOpName:"TensorArrayScatterV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArrayConcatV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape_except0",name:"elementShapeExcept0",type:"shape",notSupported:true}]},{tfOpName:"TensorArraySplitV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"tensor",type:"tensor"},{start:2,name:"lengths",type:"number[]"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArraySizeV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}]},{tfOpName:"TensorArrayCloseV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"}]},{tfOpName:"StatelessIf",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"If",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"StatelessWhile",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"While",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"TensorListScatter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListScatterV2",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"},{start:3,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGather",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListSetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListReserve",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListFromTensor",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListStack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"},{tfName:"num_elements",name:"numElements",type:"dtype"}]},{tfOpName:"TensorListSplit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"},{start:2,name:"lengths",type:"number[]"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListConcat",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}],attrs:[{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPopBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPushBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]}];var control={__proto__:null,json:json$g};var json$f=[{tfOpName:"AvgPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:true},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"MaxPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:true},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[],notSupported:true},{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"MaxPoolWithArgmax",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"include_batch_in_index",name:"includeBatchInIndex",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"AvgPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:true},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"MaxPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:true},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Conv1D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"stride",name:"stride",type:"number"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NWC"},{tfName:"T",name:"dtype",type:"dtype",notSupported:true},{tfName:"dilation",name:"dilation",type:"number",defaultValue:1}]},{tfOpName:"Conv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"useCudnnOnGpu",name:"useCudnnOnGpu",type:"bool"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"_FusedConv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:true},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"use_cudnn_on_gpu",name:"useCudnnOnGpu",type:"bool",defaultValue:true},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number"}]},{tfOpName:"Conv2DBackpropInput",category:"convolution",inputs:[{start:2,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:0,name:"outputShape",type:"number[]"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:true},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]",notSupported:true}]},{tfOpName:"DepthwiseConv2d",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"DepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"FusedDepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:true},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]}]},{tfOpName:"Conv3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"Dilation2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"rates",name:"dilations",type:"number[]"},{tfName:"padding",name:"pad",type:"string"}]}];var convolution={__proto__:null,json:json$f};var json$e=[{tfOpName:"Fill",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"},{start:1,name:"value",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"LinSpace",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"num",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"OneHot",category:"creation",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"depth",type:"number"},{start:2,name:"onValue",type:"number",defaultValue:1},{start:3,name:"offValue",type:"number",defaultValue:0}],attrs:[{tfName:"axis",name:"axis",type:"number",notSupported:true},{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Ones",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"OnesLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"RandomUniform",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number",defaultValue:0},{tfName:"maxval",name:"maxval",type:"number",defaultValue:1},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:true},{tfName:"T",name:"T",type:"number",notSupported:true}]},{tfOpName:"Range",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"step",type:"number",defaultValue:0}],attrs:[{tfName:"Tidx",name:"dtype",type:"dtype"}]},{tfOpName:"TruncatedNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"means",name:"mean",type:"number",defaultValue:0},{tfName:"stddev",name:"stdDev",type:"number",defaultValue:1},{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:true},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:true}]},{tfOpName:"Zeros",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"ZerosLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Multinomial",category:"creation",inputs:[{start:0,name:"logits",type:"tensor"},{start:1,name:"numSamples",type:"number"}],attrs:[{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number"},{tfName:"T",name:"dtype",type:"dtype"},{tfName:"output_dtype",name:"output_dtype",type:"dtype"}]}];var creation={__proto__:null,json:json$e};var json$d=[{tfOpName:"NonMaxSuppressionV2",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV3",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV4",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true},{tfName:"T_threshold",name:"threshold",type:"dtype",notSupported:true},{tfName:"pad_to_max_output_size",name:"padToMaxOutputSize",type:"bool"}]},{tfOpName:"NonMaxSuppressionV5",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"},{start:5,name:"softNmsSigma",type:"number"}]},{tfOpName:"Where",category:"dynamic",inputs:[{start:0,name:"condition",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"ListDiff",category:"dynamic",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]}];var dynamic={__proto__:null,json:json$d};var json$c=[{tfOpName:"TopKV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"k",type:"number"}],attrs:[{tfName:"sorted",name:"sorted",type:"bool"}]},{tfOpName:"Unique",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"UniqueV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]}];var evaluation={__proto__:null,json:json$c};var json$b=[{tfOpName:"PlaceholderWithDefault",category:"graph",inputs:[{start:0,name:"default",type:"tensor"}],attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Placeholder",category:"graph",attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Const",category:"graph"},{tfOpName:"Identity",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IdentityN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Snapshot",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Rank",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Size",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Shape",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"ShapeN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Print",category:"graph",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"data",type:"tensors"}],attrs:[{tfName:"message",name:"message",type:"string"},{tfName:"first_n",name:"firstN",type:"number",notSupported:true},{tfName:"summarize",name:"summarize",type:"number",defaultValue:3}]},{tfOpName:"NoOp",category:"graph",inputs:[]},{tfOpName:"StopGradient",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"FakeQuantWithMinMaxVars",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"min",name:"min",type:"number"},{tfName:"max",name:"max",type:"number"}]}];var graph={__proto__:null,json:json$b};var json$a=[{tfOpName:"HashTable",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"HashTableV2",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"LookupTableImport",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:true},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:true}]},{tfOpName:"LookupTableImportV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:true},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:true}]},{tfOpName:"LookupTableFind",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:true},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:true}]},{tfOpName:"LookupTableFindV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:true},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:true}]},{tfOpName:"LookupTableSize",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"LookupTableSizeV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]}];var hashTable={__proto__:null,json:json$a};var json$9=[{tfOpName:"ResizeBilinear",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"ResizeNearestNeighbor",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"CropAndResize",category:"image",inputs:[{start:0,name:"image",type:"tensor"},{start:1,name:"boxes",type:"tensor"},{start:2,name:"boxInd",type:"tensor"},{start:3,name:"cropSize",type:"number[]"}],attrs:[{tfName:"method",name:"method",type:"string"},{tfName:"extrapolation_value",name:"extrapolationValue",type:"number"}]}];var image$1={__proto__:null,json:json$9};var json$8=[{tfOpName:"Equal",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"NotEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Greater",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"GreaterEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Less",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"LessEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"LogicalAnd",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"LogicalNot",category:"logical",inputs:[{start:0,name:"a",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"LogicalOr",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Select",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"SelectV2",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]}];var logical={__proto__:null,json:json$8};var json$7=[{tfOpName:"_FusedMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:false},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:false},{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"MatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:false},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:false},{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"BatchMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:false},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:false},{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"BatchMatMulV2",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:false},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:false},{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Transpose",category:"matrices",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"perm",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"Einsum",category:"matrices",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"equation",name:"equation",type:"string"},{tfName:"N",name:"n",type:"number",defaultValue:2},{tfName:"T",name:"dtype",type:"dtype"}]}];var matrices={__proto__:null,json:json$7};var json$6=[{tfOpName:"FusedBatchNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:true}]},{tfOpName:"FusedBatchNormV2",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:true}]},{tfOpName:"FusedBatchNormV3",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:true}]},{tfOpName:"LRN",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"depth_radius",name:"radius",type:"number",defaultValue:5},{tfName:"bias",name:"bias",type:"number",defaultValue:1},{tfName:"alpha",name:"alpha",type:"number",defaultValue:1},{tfName:"beta",name:"beta",type:"number",defaultValue:.5}]},{tfOpName:"Softmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"LogSoftmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"SparseToDense",category:"normalization",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:true,notSupported:true}]}];var normalization={__proto__:null,json:json$6};var json$5=[{tfOpName:"Bincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}]},{tfOpName:"DenseBincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}],attrs:[{tfName:"binary_output",name:"binaryOutput",type:"bool"}]},{tfOpName:"Max",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Mean",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Min",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Sum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"All",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Any",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"ArgMax",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"ArgMin",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"Prod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Cumsum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]}];var reduction={__proto__:null,json:json$5};var json$4=[{tfOpName:"ConcatV2",category:"slice_join",inputs:[{start:0,end:-1,name:"tensors",type:"tensors"},{start:-1,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"Concat",category:"slice_join",inputs:[{start:1,end:0,name:"tensors",type:"tensors"},{start:0,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"GatherV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"axis",type:"number",defaultValue:0}],attrs:[{tfName:"batch_dims",name:"batchDims",type:"number",defaultValue:0}]},{tfOpName:"Gather",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",notSupported:true}]},{tfOpName:"Reverse",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"dims",type:"bool[]"}]},{tfOpName:"ReverseV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}]},{tfOpName:"Slice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"size",type:"number[]"}]},{tfOpName:"StridedSlice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"end",type:"number[]"},{start:3,name:"strides",type:"number[]"}],attrs:[{tfName:"begin_mask",name:"beginMask",type:"number",defaultValue:0},{tfName:"end_mask",name:"endMask",type:"number",defaultValue:0},{tfName:"new_axis_mask",name:"newAxisMask",type:"number",defaultValue:0},{tfName:"ellipsis_mask",name:"ellipsisMask",type:"number",defaultValue:0},{tfName:"shrink_axis_mask",name:"shrinkAxisMask",type:"number",defaultValue:0}]},{tfOpName:"Pack",category:"slice_join",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0}]},{tfOpName:"Unpack",category:"slice_join",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0},{tfName:"num",name:"num",type:"number",defaultValue:0,notSupported:true}]},{tfOpName:"Tile",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"reps",type:"number[]"}]},{tfOpName:"Split",category:"slice_join",inputs:[{start:0,name:"axis",type:"number",defaultValue:0},{start:1,name:"x",type:"tensor"}],attrs:[{tfName:"num_split",name:"numOrSizeSplits",type:"number",defaultValue:1}]},{tfOpName:"SplitV",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"numOrSizeSplits",type:"number[]"},{start:2,name:"axis",type:"number",defaultValue:0}]},{tfOpName:"ScatterNd",category:"slice_join",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"shape",type:"number[]"}]},{tfOpName:"GatherNd",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}]},{tfOpName:"SparseToDense",category:"slice_join",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:false,notSupported:true}]}];var sliceJoin={__proto__:null,json:json$4};var json$3=[{tfOpName:"SparseFillEmptyRows",category:"sparse",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"denseShape",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}]},{tfOpName:"SparseReshape",category:"sparse",inputs:[{start:0,name:"inputIndices",type:"tensor"},{start:1,name:"inputShape",type:"tensor"},{start:2,name:"newShape",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:true}]},{tfOpName:"SparseSegmentMean",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]},{tfOpName:"SparseSegmentSum",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]}];var sparse$1={__proto__:null,json:json$3};var json$2=[{tfOpName:"FFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"RFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:true}]},{tfOpName:"IRFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:true}]}];var spectral$1={__proto__:null,json:json$2};var json$1=[{tfOpName:"StringNGrams",category:"string",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"dataSplits",type:"tensor"}],attrs:[{tfName:"separator",name:"separator",type:"string"},{tfName:"ngram_widths",name:"nGramWidths",type:"number[]"},{tfName:"left_pad",name:"leftPad",type:"string"},{tfName:"right_pad",name:"rightPad",type:"string"},{tfName:"pad_width",name:"padWidth",type:"number"},{tfName:"preserve_short_sequences",name:"preserveShortSequences",type:"bool"}],outputs:["ngrams","ngrams_splits"]},{tfOpName:"StringSplit",category:"string",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"delimiter",type:"tensor"}],attrs:[{tfName:"skip_empty",name:"skipEmpty",type:"bool"}],outputs:["indices","values","shape"]},{tfOpName:"StringToHashBucketFast",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"num_buckets",name:"numBuckets",type:"number"}]}];var string$1={__proto__:null,json:json$1};var json=[{tfOpName:"Cast",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"SrcT",name:"sdtype",type:"dtype",notSupported:true},{tfName:"DstT",name:"dtype",type:"dtype"}]},{tfOpName:"ExpandDims",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"MirrorPad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"mode",name:"mode",type:"string"}]},{tfOpName:"Pad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"constant_value",name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"PadV2",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"},{start:2,name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"Reshape",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}]},{tfOpName:"Squeeze",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"axis",tfDeprecatedName:"squeeze_dims",name:"axis",type:"number[]"}]},{tfOpName:"SpaceToBatchND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"paddings",type:"number[]"}]},{tfOpName:"BatchToSpaceND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"crops",type:"number[]"}]},{tfOpName:"DepthToSpace",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"block_size",name:"blockSize",type:"number"},{tfName:"data_format",name:"dataFormat",type:"string"}]},{tfOpName:"BroadcastTo",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}],attrs:[]},{tfOpName:"BroadcastArgs",category:"transformation",inputs:[{start:0,name:"s0",type:"tensor"},{start:1,name:"s1",type:"tensor"}],attrs:[]}];var transformation={__proto__:null,json:json};var OperationMapper=function(){function OperationMapper(){var ops=[arithmetic,basicMath,control,convolution,creation,dynamic,evaluation,graph,hashTable,image$1,logical,matrices,normalization,reduction,sliceJoin,sparse$1,spectral$1,string$1,transformation];var mappersJson=[].concat.apply([],__spread(ops.map(function(op){return op.json})));this.opMappers=mappersJson.reduce(function(map,mapper){map[mapper.tfOpName]=mapper;return map},{})}Object.defineProperty(OperationMapper,"Instance",{get:function(){return this._instance||(this._instance=new this)},enumerable:true,configurable:true});OperationMapper.prototype.transformGraph=function(graph,signature){var _this=this;if(signature===void 0){signature={}}var tfNodes=graph.node;var placeholders=[];var weights=[];var initNodes=[];var nodes=tfNodes.reduce(function(map,node){map[node.name]=_this.mapNode(node);if(node.op.startsWith("Placeholder")){placeholders.push(map[node.name])}else if(node.op==="Const"){weights.push(map[node.name])}else if(node.input==null||node.input.length===0){initNodes.push(map[node.name])}return map},{});var inputs=[];var outputs=[];var inputNodeNameToKey={};var outputNodeNameToKey={};if(signature!=null){inputNodeNameToKey=this.mapSignatureEntries(signature.inputs);outputNodeNameToKey=this.mapSignatureEntries(signature.outputs)}var allNodes=Object.keys(nodes);allNodes.forEach(function(key){var node=nodes[key];node.inputNames.forEach(function(name,index){var _a=__read(getNodeNameAndIndex(name),3),nodeName=_a[0],outputName=_a[2];var inputNode=nodes[nodeName];if(inputNode.outputs!=null){var outputIndex=inputNode.outputs.indexOf(outputName);if(outputIndex!==-1){var inputName=nodeName+":"+outputIndex;node.inputNames[index]=inputName}}node.inputs.push(inputNode);inputNode.children.push(node)})});if(Object.keys(outputNodeNameToKey).length===0){allNodes.forEach(function(key){var node=nodes[key];if(node.children.length===0){outputs.push(node)}})}else{Object.keys(outputNodeNameToKey).forEach(function(name){var _a=__read(getNodeNameAndIndex(name),1),nodeName=_a[0];var node=nodes[nodeName];if(node!=null){node.signatureKey=outputNodeNameToKey[name];outputs.push(node)}})}if(Object.keys(inputNodeNameToKey).length>0){Object.keys(inputNodeNameToKey).forEach(function(name){var _a=__read(getNodeNameAndIndex(name),1),nodeName=_a[0];var node=nodes[nodeName];if(node){node.signatureKey=inputNodeNameToKey[name];inputs.push(node)}})}else{inputs=placeholders}var functions={};if(graph.library!=null&&graph.library.function!=null){functions=graph.library.function.reduce(function(functions,func){functions[func.signature.name]=_this.mapFunction(func);return functions},{})}var result={nodes:nodes,inputs:inputs,outputs:outputs,weights:weights,placeholders:placeholders,signature:signature,functions:functions};if(initNodes.length>0){result.initNodes=initNodes}return result};OperationMapper.prototype.mapSignatureEntries=function(entries){return Object.keys(entries||{}).reduce(function(prev,curr){prev[entries[curr].name]=curr;return prev},{})};OperationMapper.prototype.mapNode=function(node){var mapper=getRegisteredOp(node.op)||this.opMappers[node.op]||{};if(node.attr==null){node.attr={}}var newNode={name:node.name,op:node.op,category:mapper.category,inputNames:(node.input||[]).map(function(input){return input.startsWith("^")?input.substr(1):input}),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:node.attr,outputs:mapper.outputs};if(mapper.inputs!=null){newNode.inputParams=mapper.inputs.reduce(function(map,param){map[param.name]={type:param.type,inputIndexStart:param.start,inputIndexEnd:param.end};return map},{})}if(mapper.attrs!=null){newNode.attrParams=mapper.attrs.reduce(function(map,param){var type=param.type;var value=undefined;switch(param.type){case"string":value=getStringParam(node.attr,param.tfName,param.defaultValue);if(value===undefined&&!!param.tfDeprecatedName){value=getStringParam(node.attr,param.tfDeprecatedName,param.defaultValue)}break;case"string[]":value=getStringArrayParam(node.attr,param.tfName,param.defaultValue);if(value===undefined&&!!param.tfDeprecatedName){value=getStringArrayParam(node.attr,param.tfDeprecatedName,param.defaultValue)}break;case"number":value=getNumberParam(node.attr,param.tfName,param.defaultValue||0);if(value===undefined&&!!param.tfDeprecatedName){value=getNumberParam(node.attr,param.tfDeprecatedName,param.defaultValue)}break;case"number[]":value=getNumericArrayParam(node.attr,param.tfName,param.defaultValue);if(value===undefined&&!!param.tfDeprecatedName){value=getNumericArrayParam(node.attr,param.tfDeprecatedName,param.defaultValue)}break;case"bool":value=getBoolParam(node.attr,param.tfName,param.defaultValue);if(value===undefined&&!!param.tfDeprecatedName){value=getBoolParam(node.attr,param.tfDeprecatedName,param.defaultValue)}break;case"bool[]":value=getBoolArrayParam(node.attr,param.tfName,param.defaultValue);if(value===undefined&&!!param.tfDeprecatedName){value=getBoolArrayParam(node.attr,param.tfDeprecatedName,param.defaultValue)}break;case"shape":value=getTensorShapeParam(node.attr,param.tfName,param.defaultValue);if(value===undefined&&!!param.tfDeprecatedName){value=getTensorShapeParam(node.attr,param.tfDeprecatedName,param.defaultValue)}break;case"shape[]":value=getTensorShapeArrayParam(node.attr,param.tfName,param.defaultValue);if(value===undefined&&!!param.tfDeprecatedName){value=getTensorShapeArrayParam(node.attr,param.tfDeprecatedName,param.defaultValue)}break;case"dtype":value=getDtypeParam(node.attr,param.tfName,param.defaultValue);if(value===undefined&&!!param.tfDeprecatedName){value=getDtypeParam(node.attr,param.tfDeprecatedName,param.defaultValue)}break;case"dtype[]":value=getDtypeArrayParam(node.attr,param.tfName,param.defaultValue);if(value===undefined&&!!param.tfDeprecatedName){value=getDtypeArrayParam(node.attr,param.tfDeprecatedName,param.defaultValue)}break;case"func":value=getFuncParam(node.attr,param.tfName,param.defaultValue);if(value===undefined&&!!param.tfDeprecatedName){value=getFuncParam(node.attr,param.tfDeprecatedName,param.defaultValue)}break;case"tensor":case"tensors":break;default:throw new Error("Unsupported param type: "+param.type+" for op: "+node.op)}map[param.name]={value:value,type:type};return map},{})}return newNode};OperationMapper.prototype.mapFunction=function(functionDef){var _this=this;var tfNodes=functionDef.nodeDef;var placeholders=[];var weights=[];var nodes={};if(tfNodes!=null){nodes=tfNodes.reduce(function(map,node){map[node.name]=_this.mapNode(node);if(node.op==="Const"){weights.push(map[node.name])}return map},{})}var inputs=[];var outputs=[];functionDef.signature.inputArg.forEach(function(arg){var _a=__read(getNodeNameAndIndex(arg.name),1),nodeName=_a[0];var node={name:nodeName,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:parseDtypeParam(arg.type),type:"dtype"}},children:[]};node.signatureKey=arg.name;inputs.push(node);nodes[nodeName]=node});var allNodes=Object.keys(nodes);allNodes.forEach(function(key){var node=nodes[key];node.inputNames.forEach(function(name,index){var _a=__read(getNodeNameAndIndex(name),3),nodeName=_a[0],outputName=_a[2];var inputNode=nodes[nodeName];if(inputNode.outputs!=null){var outputIndex=inputNode.outputs.indexOf(outputName);if(outputIndex!==-1){var inputName=nodeName+":"+outputIndex;node.inputNames[index]=inputName}}node.inputs.push(inputNode);inputNode.children.push(node)})});var returnNodeMap=functionDef.ret;functionDef.signature.outputArg.forEach(function(output){var _a=__read(getNodeNameAndIndex(returnNodeMap[output.name]),2),nodeName=_a[0],index=_a[1];var node=nodes[nodeName];if(node!=null){node.defaultOutput=index;outputs.push(node)}});var signature=this.mapArgsToSignature(functionDef);return{nodes:nodes,inputs:inputs,outputs:outputs,weights:weights,placeholders:placeholders,signature:signature}};OperationMapper.prototype.mapArgsToSignature=function(functionDef){var _this=this;return{methodName:functionDef.signature.name,inputs:functionDef.signature.inputArg.reduce(function(map,arg){map[arg.name]=_this.mapArgToTensorInfo(arg);return map},{}),outputs:functionDef.signature.outputArg.reduce(function(map,arg){map[arg.name]=_this.mapArgToTensorInfo(arg,functionDef.ret);return map},{})}};OperationMapper.prototype.mapArgToTensorInfo=function(arg,nameMap){var name=arg.name;if(nameMap!=null){name=nameMap[name]}return{name:name,dtype:arg.type}};return OperationMapper}();function decodeBase64(text){var global=tfc.env().global;if(typeof global.atob!=="undefined"){return global.atob(text)}else if(typeof Buffer!=="undefined"){return new Buffer(text,"base64").toString()}else{throw new Error("Unable to decode base64 in this environment. "+"Missing built-in atob() or Buffer()")}}function parseStringParam(s,keepCase){var value=Array.isArray(s)?String.fromCharCode.apply(null,s):decodeBase64(s);return keepCase?value:value.toLowerCase()}function getStringParam(attrs,name,def,keepCase){if(keepCase===void 0){keepCase=false}var param=attrs[name];if(param!=null){return parseStringParam(param.s,keepCase)}return def}function getBoolParam(attrs,name,def){var param=attrs[name];return param?param.b:def}function getNumberParam(attrs,name,def){var param=attrs[name]||{};var value=param["i"]!=null?param["i"]:param["f"]!=null?param["f"]:def;return typeof value==="number"?value:parseInt(value,10)}function parseDtypeParam(value){if(typeof value==="string"){value=DataType[value]}switch(value){case DataType.DT_FLOAT:return"float32";case DataType.DT_INT32:case DataType.DT_INT64:case DataType.DT_INT8:case DataType.DT_UINT8:return"int32";case DataType.DT_BOOL:return"bool";case DataType.DT_DOUBLE:return"float32";case DataType.DT_STRING:return"string";default:return null}}function getFuncParam(attrs,name,def){var param=attrs[name];if(param&&param.func){return param.func.name}return def}function getDtypeParam(attrs,name,def){var param=attrs[name];if(param&&param.type){return parseDtypeParam(param.type)}return def}function getDtypeArrayParam(attrs,name,def){var param=attrs[name];if(param&&param.list&&param.list.type){return param.list.type.map(function(v){return parseDtypeParam(v)})}return def}function parseTensorShapeParam(shape){if(shape.unknownRank){return undefined}if(shape.dim!=null){return shape.dim.map(function(dim){return typeof dim.size==="number"?dim.size:parseInt(dim.size,10)})}return[]}function getTensorShapeParam(attrs,name,def){var param=attrs[name];if(param&&param.shape){return parseTensorShapeParam(param.shape)}return def}function getNumericArrayParam(attrs,name,def){var param=attrs[name];if(param){return((param.list.f&&param.list.f.length?param.list.f:param.list.i)||[]).map(function(v){return typeof v==="number"?v:parseInt(v,10)})}return def}function getStringArrayParam(attrs,name,def,keepCase){if(keepCase===void 0){keepCase=false}var param=attrs[name];if(param&&param.list&&param.list.s){return param.list.s.map(function(v){return parseStringParam(v,keepCase)})}return def}function getTensorShapeArrayParam(attrs,name,def){var param=attrs[name];if(param&&param.list&&param.list.shape){return param.list.shape.map(function(v){return parseTensorShapeParam(v)})}return def}function getBoolArrayParam(attrs,name,def){var param=attrs[name];if(param&&param.list&&param.list.b){return param.list.b}return def}var NodeValueImpl=function(){function NodeValueImpl(node,tensorMap,context){var _this=this;this.node=node;this.tensorMap=tensorMap;this.context=context;this.inputs=[];this.attrs={};this.inputs=node.inputNames.map(function(name){return _this.getInput(name)});if(node.rawAttrs!=null){this.attrs=Object.keys(node.rawAttrs).reduce(function(attrs,key){attrs[key]=_this.getAttr(key);return attrs},{})}}NodeValueImpl.prototype.getInput=function(name){return getTensor(name,this.tensorMap,this.context)};NodeValueImpl.prototype.getAttr=function(name,defaultValue){var value=this.node.rawAttrs[name];if(value.tensor!=null){return getTensor(name,this.tensorMap,this.context)}if(value.i!=null||value.f!=null){return getNumberParam(this.node.rawAttrs,name,defaultValue)}if(value.s!=null){return getStringParam(this.node.rawAttrs,name,defaultValue)}if(value.b!=null){return getBoolParam(this.node.rawAttrs,name,defaultValue)}if(value.shape!=null){return getTensorShapeParam(this.node.rawAttrs,name,defaultValue)}if(value.type!=null){return getDtypeParam(this.node.rawAttrs,name,defaultValue)}if(value.list!=null){if(value.list.i!=null||value.list.f!=null){return getNumericArrayParam(this.node.rawAttrs,name,defaultValue)}if(value.list.s!=null){return getStringArrayParam(this.node.rawAttrs,name,defaultValue)}if(value.list.shape!=null){return getTensorShapeArrayParam(this.node.rawAttrs,name,defaultValue)}if(value.list.b!=null){return getBoolArrayParam(this.node.rawAttrs,name,defaultValue)}if(value.list.type!=null){return getDtypeArrayParam(this.node.rawAttrs,name,defaultValue)}}return defaultValue};return NodeValueImpl}();var EPSILON_FLOAT32=1e-7;var EPSILON_FLOAT16=1e-4;var KernelBackend=function(){function KernelBackend(){}KernelBackend.prototype.refCount=function(dataId){return notYetImplemented("refCount")};KernelBackend.prototype.incRef=function(dataId){return notYetImplemented("incRef")};KernelBackend.prototype.timerAvailable=function(){return true};KernelBackend.prototype.time=function(f){return notYetImplemented("time")};KernelBackend.prototype.read=function(dataId){return notYetImplemented("read")};KernelBackend.prototype.readSync=function(dataId){return notYetImplemented("readSync")};KernelBackend.prototype.numDataIds=function(){return notYetImplemented("numDataIds")};KernelBackend.prototype.disposeData=function(dataId,force){return notYetImplemented("disposeData")};KernelBackend.prototype.write=function(values,shape,dtype){return notYetImplemented("write")};KernelBackend.prototype.move=function(dataId,values,shape,dtype,refCount){return notYetImplemented("move")};KernelBackend.prototype.memory=function(){return notYetImplemented("memory")};KernelBackend.prototype.floatPrecision=function(){return notYetImplemented("floatPrecision")};KernelBackend.prototype.epsilon=function(){return this.floatPrecision()===32?EPSILON_FLOAT32:EPSILON_FLOAT16};KernelBackend.prototype.dispose=function(){return notYetImplemented("dispose")};return KernelBackend}();function notYetImplemented(kernelName){throw new Error("'"+kernelName+"' not yet implemented or not found in the registry. "+"This kernel may not be supported by the tfjs backend you have chosen")}function assert(expr,msg){if(!expr){throw new Error(typeof msg==="string"?msg:msg())}}function assertShapesMatch(shapeA,shapeB,errorMessagePrefix){if(errorMessagePrefix===void 0){errorMessagePrefix=""}assert(arraysEqual(shapeA,shapeB),function(){return errorMessagePrefix+(" Shapes "+shapeA+" and "+shapeB+" must match")})}function assertNonNull(a){assert(a!=null,function(){return"The input to the tensor constructor must be a non-null value."})}function flatten(arr,result,skipTypedArray){if(result===void 0){result=[]}if(skipTypedArray===void 0){skipTypedArray=false}if(result==null){result=[]}if(Array.isArray(arr)||isTypedArray(arr)&&!skipTypedArray){for(var i=0;i<arr.length;++i){flatten(arr[i],result,skipTypedArray)}}else{result.push(arr)}return result}function sizeFromShape(shape){if(shape.length===0){return 1}var size=shape[0];for(var i=1;i<shape.length;i++){size*=shape[i]}return size}function arraysEqual(n1,n2){if(n1===n2){return true}if(n1==null||n2==null){return false}if(n1.length!==n2.length){return false}for(var i=0;i<n1.length;i++){if(n1[i]!==n2[i]){return false}}return true}function isInt(a){return a%1===0}function rightPad(a,size){if(size<=a.length){return a}return a+" ".repeat(size-a.length)}function parseAxisParam(axis,shape){var rank=shape.length;axis=axis==null?shape.map(function(s,i){return i}):[].concat(axis);assert(axis.every(function(ax){return ax>=-rank&&ax<rank}),function(){return"All values in axis param must be in range [-"+rank+", "+rank+") but "+("got axis "+axis)});assert(axis.every(function(ax){return isInt(ax)}),function(){return"All values in axis param must be integers but "+("got axis "+axis)});return axis.map(function(a){return a<0?rank+a:a})}function squeezeShape(shape,axis){var newShape=[];var keptDims=[];var isEmptyArray=axis!=null&&Array.isArray(axis)&&axis.length===0;var axes=axis==null||isEmptyArray?null:parseAxisParam(axis,shape).sort();var j=0;for(var i=0;i<shape.length;++i){if(axes!=null){if(axes[j]===i&&shape[i]!==1){throw new Error("Can't squeeze axis "+i+" since its dim '"+shape[i]+"' is not 1")}if((axes[j]==null||axes[j]>i)&&shape[i]===1){newShape.push(shape[i]);keptDims.push(i)}if(axes[j]<=i){j++}}if(shape[i]!==1){newShape.push(shape[i]);keptDims.push(i)}}return{newShape:newShape,keptDims:keptDims}}function getTypedArrayFromDType(dtype,size){var values=null;if(dtype==null||dtype==="float32"){values=new Float32Array(size)}else if(dtype==="int32"){values=new Int32Array(size)}else if(dtype==="bool"){values=new Uint8Array(size)}else{throw new Error("Unknown data type "+dtype)}return values}function getArrayFromDType(dtype,size){var values=null;if(dtype==null||dtype==="float32"){values=new Float32Array(size)}else if(dtype==="int32"){values=new Int32Array(size)}else if(dtype==="bool"){values=new Uint8Array(size)}else if(dtype==="string"){values=new Array(size)}else{throw new Error("Unknown data type "+dtype)}return values}function checkConversionForErrors(vals,dtype){for(var i=0;i<vals.length;i++){var num=vals[i];if(isNaN(num)||!isFinite(num)){throw Error("A tensor of type "+dtype+" being uploaded contains "+num+".")}}}function isValidDtype(dtype){return dtype==="bool"||dtype==="complex64"||dtype==="float32"||dtype==="int32"||dtype==="string"}function isTypedArray(a){return a instanceof Float32Array||a instanceof Int32Array||a instanceof Uint8Array||a instanceof Uint8ClampedArray}function bytesPerElement(dtype){if(dtype==="float32"||dtype==="int32"){return 4}else if(dtype==="complex64"){return 8}else if(dtype==="bool"){return 1}else{throw new Error("Unknown dtype "+dtype)}}function bytesFromStringArray(arr){if(arr==null){return 0}var bytes=0;arr.forEach(function(x){return bytes+=x.length});return bytes}function isString(value){return typeof value==="string"||value instanceof String}function isBoolean(value){return typeof value==="boolean"}function isNumber(value){return typeof value==="number"}function inferDtype(values){if(Array.isArray(values)){return inferDtype(values[0])}if(values instanceof Float32Array){return"float32"}else if(values instanceof Int32Array||values instanceof Uint8Array||values instanceof Uint8ClampedArray){return"int32"}else if(isNumber(values)){return"float32"}else if(isString(values)){return"string"}else if(isBoolean(values)){return"bool"}return"float32"}function isFunction(f){return!!(f&&f.constructor&&f.call&&f.apply)}function computeStrides(shape){var rank=shape.length;if(rank<2){return[]}var strides=new Array(rank-1);strides[rank-2]=shape[rank-1];for(var i=rank-3;i>=0;--i){strides[i]=strides[i+1]*shape[i+1]}return strides}function createNestedArray(offset,shape,a,isComplex){if(isComplex===void 0){isComplex=false}var ret=new Array;if(shape.length===1){var d=shape[0]*(isComplex?2:1);for(var i=0;i<d;i++){ret[i]=a[offset+i]}}else{var d=shape[0];var rest=shape.slice(1);var len=rest.reduce(function(acc,c){return acc*c})*(isComplex?2:1);for(var i=0;i<d;i++){ret[i]=createNestedArray(offset+i*len,rest,a,isComplex)}}return ret}function toNestedArray(shape,a,isComplex){if(isComplex===void 0){isComplex=false}if(shape.length===0){return a[0]}var size=shape.reduce(function(acc,c){return acc*c})*(isComplex?2:1);if(size===0){return[]}if(size!==a.length){throw new Error("["+shape+"] does not match the input size "+a.length+(isComplex?" for a complex tensor":"")+".")}return createNestedArray(0,shape,a,isComplex)}function makeOnesTypedArray(size,dtype){var array=makeZerosTypedArray(size,dtype);for(var i=0;i<array.length;i++){array[i]=1}return array}function makeZerosTypedArray(size,dtype){if(dtype==null||dtype==="float32"||dtype==="complex64"){return new Float32Array(size)}else if(dtype==="int32"){return new Int32Array(size)}else if(dtype==="bool"){return new Uint8Array(size)}else{throw new Error("Unknown data type "+dtype)}}function assertNonNegativeIntegerDimensions(shape){shape.forEach(function(dimSize){assert(Number.isInteger(dimSize)&&dimSize>=0,function(){return"Tensor must have a shape comprised of positive integers but got "+("shape ["+shape+"].")})})}function isPromise(object){return object&&object.then&&typeof object.then==="function"}function warn(){var msg=[];for(var _i=0;_i<arguments.length;_i++){msg[_i]=arguments[_i]}if(!(env().getBool("IS_TEST")||env().getBool("PROD"))){console.warn.apply(console,__spread(msg))}}var TENSORFLOWJS_FLAGS_PREFIX="tfjsflags";var Environment=function(){function Environment(global){this.global=global;this.flags={};this.flagRegistry={};this.urlFlags={};this.getQueryParams=getQueryParams;this.populateURLFlags()}Environment.prototype.setPlatform=function(platformName,platform){if(this.platform!=null){warn("Platform "+this.platformName+" has already been set. "+("Overwriting the platform with "+platform+"."))}this.platformName=platformName;this.platform=platform};Environment.prototype.registerFlag=function(flagName,evaluationFn,setHook){this.flagRegistry[flagName]={evaluationFn:evaluationFn,setHook:setHook};if(this.urlFlags[flagName]!=null){var flagValue=this.urlFlags[flagName];warn("Setting feature override from URL "+flagName+": "+flagValue+".");this.set(flagName,flagValue)}};Environment.prototype.getAsync=function(flagName){return __awaiter(this,void 0,void 0,function(){var _a,_b;return __generator(this,function(_c){switch(_c.label){case 0:if(flagName in this.flags){return[2,this.flags[flagName]]}_a=this.flags;_b=flagName;return[4,this.evaluateFlag(flagName)];case 1:_a[_b]=_c.sent();return[2,this.flags[flagName]]}})})};Environment.prototype.get=function(flagName){if(flagName in this.flags){return this.flags[flagName]}var flagValue=this.evaluateFlag(flagName);if(isPromise(flagValue)){throw new Error("Flag "+flagName+" cannot be synchronously evaluated. "+"Please use getAsync() instead.")}this.flags[flagName]=flagValue;return this.flags[flagName]};Environment.prototype.getNumber=function(flagName){return this.get(flagName)};Environment.prototype.getBool=function(flagName){return this.get(flagName)};Environment.prototype.getFlags=function(){return this.flags};Object.defineProperty(Environment.prototype,"features",{get:function(){return this.flags},enumerable:true,configurable:true});Environment.prototype.set=function(flagName,value){if(this.flagRegistry[flagName]==null){throw new Error("Cannot set flag "+flagName+" as it has not been registered.")}this.flags[flagName]=value;if(this.flagRegistry[flagName].setHook!=null){this.flagRegistry[flagName].setHook(value)}};Environment.prototype.evaluateFlag=function(flagName){if(this.flagRegistry[flagName]==null){throw new Error("Cannot evaluate flag '"+flagName+"': no evaluation function found.")}return this.flagRegistry[flagName].evaluationFn()};Environment.prototype.setFlags=function(flags){this.flags=Object.assign({},flags)};Environment.prototype.reset=function(){this.flags={};this.urlFlags={};this.populateURLFlags()};Environment.prototype.populateURLFlags=function(){var _this=this;if(typeof this.global==="undefined"||typeof this.global.location==="undefined"||typeof this.global.location.search==="undefined"){return}var urlParams=this.getQueryParams(this.global.location.search);if(TENSORFLOWJS_FLAGS_PREFIX in urlParams){var keyValues=urlParams[TENSORFLOWJS_FLAGS_PREFIX].split(",");keyValues.forEach(function(keyValue){var _a=__read(keyValue.split(":"),2),key=_a[0],value=_a[1];_this.urlFlags[key]=parseValue(key,value)})}};return Environment}();function getQueryParams(queryString){var params={};queryString.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,function(s){var t=[];for(var _i=1;_i<arguments.length;_i++){t[_i-1]=arguments[_i]}decodeParam(params,t[0],t[1]);return t.join("=")});return params}function decodeParam(params,name,value){params[decodeURIComponent(name)]=decodeURIComponent(value||"")}function parseValue(flagName,value){value=value.toLowerCase();if(value==="true"||value==="false"){return value==="true"}else if(""+ +value===value){return+value}throw new Error("Could not parse value flag value "+value+" for flag "+flagName+".")}function env(){return ENV}var ENV=null;function setEnvironmentGlobal(environment){ENV=environment}var globalNameSpace;function getGlobalNamespace(){if(globalNameSpace==null){var ns=void 0;if(typeof window!=="undefined"){ns=window}else if(typeof global!=="undefined"){ns=global}else if(typeof process!=="undefined"){ns=process}else if(typeof self!=="undefined"){ns=self}else{throw new Error("Could not find a global object")}globalNameSpace=ns}return globalNameSpace}function getGlobalMap(){var ns=getGlobalNamespace();if(ns._tfGlobals==null){ns._tfGlobals=new Map}return ns._tfGlobals}function getGlobal(key,init){var globalMap=getGlobalMap();if(globalMap.has(key)){return globalMap.get(key)}else{var singleton=init();globalMap.set(key,singleton);return globalMap.get(key)}}var Abs="Abs";var Acos="Acos";var Acosh="Acosh";var Add="Add";var AddN="AddN";var All="All";var Any="Any";var ArgMax="ArgMax";var ArgMin="ArgMin";var Asin="Asin";var Asinh="Asinh";var Atan="Atan";var Atanh="Atanh";var Atan2="Atan2";var AvgPool="AvgPool";var AvgPool3D="AvgPool3D";var BatchMatMul="BatchMatMul";var BatchToSpaceND="BatchToSpaceND";var Bincount="Bincount";var BroadcastArgs="BroadcastArgs";var Cast="Cast";var Ceil="Ceil";var ClipByValue="ClipByValue";var Complex="Complex";var ComplexAbs="ComplexAbs";var Concat="Concat";var Conv2D="Conv2D";var Conv2DBackpropFilter="Conv2DBackpropFilter";var Conv2DBackpropInput="Conv2DBackpropInput";var Conv3D="Conv3D";var Conv3DBackpropInputV2="Conv3DBackpropInputV2";var Cos="Cos";var Cosh="Cosh";var Cumsum="Cumsum";var CropAndResize="CropAndResize";var DenseBincount="DenseBincount";var DepthToSpace="DepthToSpace";var DepthwiseConv2dNative="DepthwiseConv2dNative";var DepthwiseConv2dNativeBackpropFilter="DepthwiseConv2dNativeBackpropFilter";var DepthwiseConv2dNativeBackpropInput="DepthwiseConv2dNativeBackpropInput";var Diag="Diag";var Dilation2D="Dilation2D";var RealDiv="RealDiv";var Einsum="Einsum";var Elu="Elu";var Erf="Erf";var Equal="Equal";var Exp="Exp";var ExpandDims="ExpandDims";var Expm1="Expm1";var FFT="FFT";var Fill="Fill";var FlipLeftRight="FlipLeftRight";var Floor="Floor";var FloorDiv="FloorDiv";var FusedBatchNorm="FusedBatchNorm";var GatherV2="GatherV2";var GatherNd="GatherNd";var Greater="Greater";var GreaterEqual="GreaterEqual";var Identity="Identity";var IFFT="IFFT";var Imag="Imag";var IsFinite="IsFinite";var IsInf="IsInf";var IsNan="IsNan";var LeakyRelu="LeakyRelu";var Less="Less";var LessEqual="LessEqual";var LinSpace="LinSpace";var Log="Log";var Log1p="Log1p";var LogicalAnd="LogicalAnd";var LogicalNot="LogicalNot";var LogicalOr="LogicalOr";var LRN="LRN";var Max="Max";var Maximum="Maximum";var MaxPool="MaxPool";var MaxPool3D="MaxPool3D";var MaxPoolWithArgmax="MaxPoolWithArgmax";var Mean="Mean";var Min="Min";var Minimum="Minimum";var MirrorPad="MirrorPad";var Mod="Mod";var Multinomial="Multinomial";var Multiply="Multiply";var Neg="Neg";var NotEqual="NotEqual";var NonMaxSuppressionV3="NonMaxSuppressionV3";var NonMaxSuppressionV4="NonMaxSuppressionV4";var NonMaxSuppressionV5="NonMaxSuppressionV5";var OnesLike="OnesLike";var OneHot="OneHot";var Pack="Pack";var PadV2="PadV2";var Pow="Pow";var Prelu="Prelu";var Prod="Prod";var Range="Range";var Real="Real";var Reciprocal="Reciprocal";var Relu="Relu";var Reshape="Reshape";var ResizeNearestNeighbor="ResizeNearestNeighbor";var ResizeBilinear="ResizeBilinear";var Relu6="Relu6";var Reverse="Reverse";var Round="Round";var Rsqrt="Rsqrt";var ScatterNd="ScatterNd";var Select="Select";var Selu="Selu";var Slice="Slice";var Sin="Sin";var Sinh="Sinh";var Sign="Sign";var Sigmoid="Sigmoid";var Softplus="Softplus";var Sqrt="Sqrt";var Sum="Sum";var SpaceToBatchND="SpaceToBatchND";var SplitV="SplitV";var Softmax="Softmax";var SparseFillEmptyRows="SparseFillEmptyRows";var SparseReshape="SparseReshape";var SparseSegmentMean="SparseSegmentMean";var SparseSegmentSum="SparseSegmentSum";var SparseToDense="SparseToDense";var SquaredDifference="SquaredDifference";var StridedSlice="StridedSlice";var StringNGrams="StringNGrams";var StringSplit="StringSplit";var StringToHashBucketFast="StringToHashBucketFast";var Sub="Sub";var Tan="Tan";var Tanh="Tanh";var Tile="Tile";var TopK="TopK";var Transform="Transform";var Transpose="Transpose";var Unique="Unique";var Unpack="Unpack";var UnsortedSegmentSum="UnsortedSegmentSum";var ZerosLike="ZerosLike";var Step="Step";var RotateWithOffset="RotateWithOffset";var _FusedMatMul="_FusedMatMul";var FusedConv2D="FusedConv2D";var FusedDepthwiseConv2D="FusedDepthwiseConv2D";var kernelRegistry=getGlobal("kernelRegistry",function(){return new Map});var gradRegistry=getGlobal("gradRegistry",function(){return new Map});function getKernel(kernelName,backendName){var key=makeKey(kernelName,backendName);return kernelRegistry.get(key)}function getGradient(kernelName){return gradRegistry.get(kernelName)}function getKernelsForBackend(backendName){var it=kernelRegistry.entries();var result=[];while(true){var _a=it.next(),done=_a.done,value=_a.value;if(done){break}var _b=__read(value,2),key=_b[0],config=_b[1];var _c=__read(key.split("_"),1),backend=_c[0];if(backend===backendName){result.push(config)}}return result}function makeKey(kernelName,backendName){return backendName+"_"+kernelName}var long=Long$1;var wasm=null;try{wasm=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([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])),{}).exports}catch(e){}function Long$1(low,high,unsigned){this.low=low|0;this.high=high|0;this.unsigned=!!unsigned}Long$1.prototype.__isLong__;Object.defineProperty(Long$1.prototype,"__isLong__",{value:true});function isLong(obj){return(obj&&obj["__isLong__"])===true}Long$1.isLong=isLong;var INT_CACHE={};var UINT_CACHE={};function fromInt(value,unsigned){var obj,cachedObj,cache;if(unsigned){value>>>=0;if(cache=0<=value&&value<256){cachedObj=UINT_CACHE[value];if(cachedObj)return cachedObj}obj=fromBits(value,(value|0)<0?-1:0,true);if(cache)UINT_CACHE[value]=obj;return obj}else{value|=0;if(cache=-128<=value&&value<128){cachedObj=INT_CACHE[value];if(cachedObj)return cachedObj}obj=fromBits(value,value<0?-1:0,false);if(cache)INT_CACHE[value]=obj;return obj}}Long$1.fromInt=fromInt;function fromNumber(value,unsigned){if(isNaN(value))return unsigned?UZERO:ZERO;if(unsigned){if(value<0)return UZERO;if(value>=TWO_PWR_64_DBL)return MAX_UNSIGNED_VALUE}else{if(value<=-TWO_PWR_63_DBL)return MIN_VALUE;if(value+1>=TWO_PWR_63_DBL)return MAX_VALUE}if(value<0)return fromNumber(-value,unsigned).neg();return fromBits(value%TWO_PWR_32_DBL|0,value/TWO_PWR_32_DBL|0,unsigned)}Long$1.fromNumber=fromNumber;function fromBits(lowBits,highBits,unsigned){return new Long$1(lowBits,highBits,unsigned)}Long$1.fromBits=fromBits;var pow_dbl=Math.pow;function fromString(str,unsigned,radix){if(str.length===0)throw Error("empty string");if(str==="NaN"||str==="Infinity"||str==="+Infinity"||str==="-Infinity")return ZERO;if(typeof unsigned==="number"){radix=unsigned,unsigned=false}else{unsigned=!!unsigned}radix=radix||10;if(radix<2||36<radix)throw RangeError("radix");var p;if((p=str.indexOf("-"))>0)throw Error("interior hyphen");else if(p===0){return fromString(str.substring(1),unsigned,radix).neg()}var radixToPower=fromNumber(pow_dbl(radix,8));var result=ZERO;for(var i=0;i<str.length;i+=8){var size=Math.min(8,str.length-i),value=parseInt(str.substring(i,i+size),radix);if(size<8){var power=fromNumber(pow_dbl(radix,size));result=result.mul(power).add(fromNumber(value))}else{result=result.mul(radixToPower);result=result.add(fromNumber(value))}}result.unsigned=unsigned;return result}Long$1.fromString=fromString;function fromValue(val,unsigned){if(typeof val==="number")return fromNumber(val,unsigned);if(typeof val==="string")return fromString(val,unsigned);return fromBits(val.low,val.high,typeof unsigned==="boolean"?unsigned:val.unsigned)}Long$1.fromValue=fromValue;var TWO_PWR_16_DBL=1<<16;var TWO_PWR_24_DBL=1<<24;var TWO_PWR_32_DBL=TWO_PWR_16_DBL*TWO_PWR_16_DBL;var TWO_PWR_64_DBL=TWO_PWR_32_DBL*TWO_PWR_32_DBL;var TWO_PWR_63_DBL=TWO_PWR_64_DBL/2;var TWO_PWR_24=fromInt(TWO_PWR_24_DBL);var ZERO=fromInt(0);Long$1.ZERO=ZERO;var UZERO=fromInt(0,true);Long$1.UZERO=UZERO;var ONE=fromInt(1);Long$1.ONE=ONE;var UONE=fromInt(1,true);Long$1.UONE=UONE;var NEG_ONE=fromInt(-1);Long$1.NEG_ONE=NEG_ONE;var MAX_VALUE=fromBits(4294967295|0,2147483647|0,false);Long$1.MAX_VALUE=MAX_VALUE;var MAX_UNSIGNED_VALUE=fromBits(4294967295|0,4294967295|0,true);Long$1.MAX_UNSIGNED_VALUE=MAX_UNSIGNED_VALUE;var MIN_VALUE=fromBits(0,2147483648|0,false);Long$1.MIN_VALUE=MIN_VALUE;var LongPrototype=Long$1.prototype;LongPrototype.toInt=function toInt(){return this.unsigned?this.low>>>0:this.low};LongPrototype.toNumber=function toNumber(){if(this.unsigned)return(this.high>>>0)*TWO_PWR_32_DBL+(this.low>>>0);return this.high*TWO_PWR_32_DBL+(this.low>>>0)};LongPrototype.toString=function toString(radix){radix=radix||10;if(radix<2||36<radix)throw RangeError("radix");if(this.isZero())return"0";if(this.isNegative()){if(this.eq(MIN_VALUE)){var radixLong=fromNumber(radix),div=this.div(radixLong),rem1=div.mul(radixLong).sub(this);return div.toString(radix)+rem1.toInt().toString(radix)}else return"-"+this.neg().toString(radix)}var radixToPower=fromNumber(pow_dbl(radix,6),this.unsigned),rem=this;var result="";while(true){var remDiv=rem.div(radixToPower),intval=rem.sub(remDiv.mul(radixToPower)).toInt()>>>0,digits=intval.toString(radix);rem=remDiv;if(rem.isZero())return digits+result;else{while(digits.length<6)digits="0"+digits;result=""+digits+result}}};LongPrototype.getHighBits=function getHighBits(){return this.high};LongPrototype.getHighBitsUnsigned=function getHighBitsUnsigned(){return this.high>>>0};LongPrototype.getLowBits=function getLowBits(){return this.low};LongPrototype.getLowBitsUnsigned=function getLowBitsUnsigned(){return this.low>>>0};LongPrototype.getNumBitsAbs=function getNumBitsAbs(){if(this.isNegative())return this.eq(MIN_VALUE)?64:this.neg().getNumBitsAbs();var val=this.high!=0?this.high:this.low;for(var bit=31;bit>0;bit--)if((val&1<<bit)!=0)break;return this.high!=0?bit+33:bit+1};LongPrototype.isZero=function isZero(){return this.high===0&&this.low===0};LongPrototype.eqz=LongPrototype.isZero;LongPrototype.isNegative=function isNegative(){return!this.unsigned&&this.high<0};LongPrototype.isPositive=function isPositive(){return this.unsigned||this.high>=0};LongPrototype.isOdd=function isOdd(){return(this.low&1)===1};LongPrototype.isEven=function isEven(){return(this.low&1)===0};LongPrototype.equals=function equals(other){if(!isLong(other))other=fromValue(other);if(this.unsigned!==other.unsigned&&this.high>>>31===1&&other.high>>>31===1)return false;return this.high===other.high&&this.low===other.low};LongPrototype.eq=LongPrototype.equals;LongPrototype.notEquals=function notEquals(other){return!this.eq(other)};LongPrototype.neq=LongPrototype.notEquals;LongPrototype.ne=LongPrototype.notEquals;LongPrototype.lessThan=function lessThan(other){return this.comp(other)<0};LongPrototype.lt=LongPrototype.lessThan;LongPrototype.lessThanOrEqual=function lessThanOrEqual(other){return this.comp(other)<=0};LongPrototype.lte=LongPrototype.lessThanOrEqual;LongPrototype.le=LongPrototype.lessThanOrEqual;LongPrototype.greaterThan=function greaterThan(other){return this.comp(other)>0};LongPrototype.gt=LongPrototype.greaterThan;LongPrototype.greaterThanOrEqual=function greaterThanOrEqual(other){return this.comp(other)>=0};LongPrototype.gte=LongPrototype.greaterThanOrEqual;LongPrototype.ge=LongPrototype.greaterThanOrEqual;LongPrototype.compare=function compare(other){if(!isLong(other))other=fromValue(other);if(this.eq(other))return 0;var thisNeg=this.isNegative(),otherNeg=other.isNegative();if(thisNeg&&!otherNeg)return-1;if(!thisNeg&&otherNeg)return 1;if(!this.unsigned)return this.sub(other).isNegative()?-1:1;return other.high>>>0>this.high>>>0||other.high===this.high&&other.low>>>0>this.low>>>0?-1:1};LongPrototype.comp=LongPrototype.compare;LongPrototype.negate=function negate(){if(!this.unsigned&&this.eq(MIN_VALUE))return MIN_VALUE;return this.not().add(ONE)};LongPrototype.neg=LongPrototype.negate;LongPrototype.add=function add(addend){if(!isLong(addend))addend=fromValue(addend);var a48=this.high>>>16;var a32=this.high&65535;var a16=this.low>>>16;var a00=this.low&65535;var b48=addend.high>>>16;var b32=addend.high&65535;var b16=addend.low>>>16;var b00=addend.low&65535;var c48=0,c32=0,c16=0,c00=0;c00+=a00+b00;c16+=c00>>>16;c00&=65535;c16+=a16+b16;c32+=c16>>>16;c16&=65535;c32+=a32+b32;c48+=c32>>>16;c32&=65535;c48+=a48+b48;c48&=65535;return fromBits(c16<<16|c00,c48<<16|c32,this.unsigned)};LongPrototype.subtract=function subtract(subtrahend){if(!isLong(subtrahend))subtrahend=fromValue(subtrahend);return this.add(subtrahend.neg())};LongPrototype.sub=LongPrototype.subtract;LongPrototype.multiply=function multiply(multiplier){if(this.isZero())return ZERO;if(!isLong(multiplier))multiplier=fromValue(multiplier);if(wasm){var low=wasm.mul(this.low,this.high,multiplier.low,multiplier.high);return fromBits(low,wasm.get_high(),this.unsigned)}if(multiplier.isZero())return ZERO;if(this.eq(MIN_VALUE))return multiplier.isOdd()?MIN_VALUE:ZERO;if(multiplier.eq(MIN_VALUE))return this.isOdd()?MIN_VALUE:ZERO;if(this.isNegative()){if(multiplier.isNegative())return this.neg().mul(multiplier.neg());else return this.neg().mul(multiplier).neg()}else if(multiplier.isNegative())return this.mul(multiplier.neg()).neg();if(this.lt(TWO_PWR_24)&&multiplier.lt(TWO_PWR_24))return fromNumber(this.toNumber()*multiplier.toNumber(),this.unsigned);var a48=this.high>>>16;var a32=this.high&65535;var a16=this.low>>>16;var a00=this.low&65535;var b48=multiplier.high>>>16;var b32=multiplier.high&65535;var b16=multiplier.low>>>16;var b00=multiplier.low&65535;var c48=0,c32=0,c16=0,c00=0;c00+=a00*b00;c16+=c00>>>16;c00&=65535;c16+=a16*b00;c32+=c16>>>16;c16&=65535;c16+=a00*b16;c32+=c16>>>16;c16&=65535;c32+=a32*b00;c48+=c32>>>16;c32&=65535;c32+=a16*b16;c48+=c32>>>16;c32&=65535;c32+=a00*b32;c48+=c32>>>16;c32&=65535;c48+=a48*b00+a32*b16+a16*b32+a00*b48;c48&=65535;return fromBits(c16<<16|c00,c48<<16|c32,this.unsigned)};LongPrototype.mul=LongPrototype.multiply;LongPrototype.divide=function divide(divisor){if(!isLong(divisor))divisor=fromValue(divisor);if(divisor.isZero())throw Error("division by zero");if(wasm){if(!this.unsigned&&this.high===-2147483648&&divisor.low===-1&&divisor.high===-1){return this}var low=(this.unsigned?wasm.div_u:wasm.div_s)(this.low,this.high,divisor.low,divisor.high);return fromBits(low,wasm.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?UZERO:ZERO;var approx,rem,res;if(!this.unsigned){if(this.eq(MIN_VALUE)){if(divisor.eq(ONE)||divisor.eq(NEG_ONE))return MIN_VALUE;else if(divisor.eq(MIN_VALUE))return ONE;else{var halfThis=this.shr(1);approx=halfThis.div(divisor).shl(1);if(approx.eq(ZERO)){return divisor.isNegative()?ONE:NEG_ONE}else{rem=this.sub(divisor.mul(approx));res=approx.add(rem.div(divisor));return res}}}else if(divisor.eq(MIN_VALUE))return this.unsigned?UZERO:ZERO;if(this.isNegative()){if(divisor.isNegative())return this.neg().div(divisor.neg());return this.neg().div(divisor).neg()}else if(divisor.isNegative())return this.div(divisor.neg()).neg();res=ZERO}else{if(!divisor.unsigned)divisor=divisor.toUnsigned();if(divisor.gt(this))return UZERO;if(divisor.gt(this.shru(1)))return UONE;res=UZERO}rem=this;while(rem.gte(divisor)){approx=Math.max(1,Math.floor(rem.toNumber()/divisor.toNumber()));var log2=Math.ceil(Math.log(approx)/Math.LN2),delta=log2<=48?1:pow_dbl(2,log2-48),approxRes=fromNumber(approx),approxRem=approxRes.mul(divisor);while(approxRem.isNegative()||approxRem.gt(rem)){approx-=delta;approxRes=fromNumber(approx,this.unsigned);approxRem=approxRes.mul(divisor)}if(approxRes.isZero())approxRes=ONE;res=res.add(approxRes);rem=rem.sub(approxRem)}return res};LongPrototype.div=LongPrototype.divide;LongPrototype.modulo=function modulo(divisor){if(!isLong(divisor))divisor=fromValue(divisor);if(wasm){var low=(this.unsigned?wasm.rem_u:wasm.rem_s)(this.low,this.high,divisor.low,divisor.high);return fromBits(low,wasm.get_high(),this.unsigned)}return this.sub(this.div(divisor).mul(divisor))};LongPrototype.mod=LongPrototype.modulo;LongPrototype.rem=LongPrototype.modulo;LongPrototype.not=function not(){return fromBits(~this.low,~this.high,this.unsigned)};LongPrototype.and=function and(other){if(!isLong(other))other=fromValue(other);return fromBits(this.low&other.low,this.high&other.high,this.unsigned)};LongPrototype.or=function or(other){if(!isLong(other))other=fromValue(other);return fromBits(this.low|other.low,this.high|other.high,this.unsigned)};LongPrototype.xor=function xor(other){if(!isLong(other))other=fromValue(other);return fromBits(this.low^other.low,this.high^other.high,this.unsigned)};LongPrototype.shiftLeft=function shiftLeft(numBits){if(isLong(numBits))numBits=numBits.toInt();if((numBits&=63)===0)return this;else if(numBits<32)return fromBits(this.low<<numBits,this.high<<numBits|this.low>>>32-numBits,this.unsigned);else return fromBits(0,this.low<<numBits-32,this.unsigned)};LongPrototype.shl=LongPrototype.shiftLeft;LongPrototype.shiftRight=function shiftRight(numBits){if(isLong(numBits))numBits=numBits.toInt();if((numBits&=63)===0)return this;else if(numBits<32)return fromBits(this.low>>>numBits|this.high<<32-numBits,this.high>>numBits,this.unsigned);else return fromBits(this.high>>numBits-32,this.high>=0?0:-1,this.unsigned)};LongPrototype.shr=LongPrototype.shiftRight;LongPrototype.shiftRightUnsigned=function shiftRightUnsigned(numBits){if(isLong(numBits))numBits=numBits.toInt();numBits&=63;if(numBits===0)return this;else{var high=this.high;if(numBits<32){var low=this.low;return fromBits(low>>>numBits|high<<32-numBits,high>>>numBits,this.unsigned)}else if(numBits===32)return fromBits(high,0,this.unsigned);else return fromBits(high>>>numBits-32,0,this.unsigned)}};LongPrototype.shru=LongPrototype.shiftRightUnsigned;LongPrototype.shr_u=LongPrototype.shiftRightUnsigned;LongPrototype.toSigned=function toSigned(){if(!this.unsigned)return this;return fromBits(this.low,this.high,false)};LongPrototype.toUnsigned=function toUnsigned(){if(this.unsigned)return this;return fromBits(this.low,this.high,true)};LongPrototype.toBytes=function toBytes(le){return le?this.toBytesLE():this.toBytesBE()};LongPrototype.toBytesLE=function toBytesLE(){var hi=this.high,lo=this.low;return[lo&255,lo>>>8&255,lo>>>16&255,lo>>>24,hi&255,hi>>>8&255,hi>>>16&255,hi>>>24]};LongPrototype.toBytesBE=function toBytesBE(){var hi=this.high,lo=this.low;return[hi>>>24,hi>>>16&255,hi>>>8&255,hi&255,lo>>>24,lo>>>16&255,lo>>>8&255,lo&255]};Long$1.fromBytes=function fromBytes(bytes,unsigned,le){return le?Long$1.fromBytesLE(bytes,unsigned):Long$1.fromBytesBE(bytes,unsigned)};Long$1.fromBytesLE=function fromBytesLE(bytes,unsigned){return new Long$1(bytes[0]|bytes[1]<<8|bytes[2]<<16|bytes[3]<<24,bytes[4]|bytes[5]<<8|bytes[6]<<16|bytes[7]<<24,unsigned)};Long$1.fromBytesBE=function fromBytesBE(bytes,unsigned){return new Long$1(bytes[4]<<24|bytes[5]<<16|bytes[6]<<8|bytes[7],bytes[0]<<24|bytes[1]<<16|bytes[2]<<8|bytes[3],unsigned)};var LongExports=Object.assign(Object.create(null),long,{default:long});var Long=long||LongExports;function hexToLong(hex){return Long.fromString(hex,true,16)}hexToLong("c3a5c85c97cb3127");hexToLong("b492b66fbe98f273");hexToLong("9ae16a3b2f90404f");function noConversionNeeded(a,dtype){return a instanceof Float32Array&&dtype==="float32"||a instanceof Int32Array&&dtype==="int32"||a instanceof Uint8Array&&dtype==="bool"}function toTypedArray(a,dtype){if(dtype==="string"){throw new Error("Cannot convert a string[] to a TypedArray")}if(Array.isArray(a)){a=flatten(a)}if(env().getBool("DEBUG")){checkConversionForErrors(a,dtype)}if(noConversionNeeded(a,dtype)){return a}if(dtype==null||dtype==="float32"||dtype==="complex64"){return new Float32Array(a)}else if(dtype==="int32"){return new Int32Array(a)}else if(dtype==="bool"){var bool=new Uint8Array(a.length);for(var i=0;i<bool.length;++i){if(Math.round(a[i])!==0){bool[i]=1}}return bool}else{throw new Error("Unknown data type "+dtype)}}function now(){return env().platform.now()}function encodeString(s,encoding){if(encoding===void 0){encoding="utf-8"}encoding=encoding||"utf-8";return env().platform.encode(s,encoding)}function decodeString(bytes,encoding){if(encoding===void 0){encoding="utf-8"}encoding=encoding||"utf-8";return env().platform.decode(bytes,encoding)}var Profiler=function(){function Profiler(backendTimer,logger){this.backendTimer=backendTimer;this.logger=logger;if(logger==null){this.logger=new Logger}}Profiler.prototype.profileKernel=function(kernelName,inputs,f){var e_1,_a;var outputs;var holdResultWrapperFn=function(){outputs=f()};var timer;var start=now();if(this.backendTimer.timerAvailable()){timer=this.backendTimer.time(holdResultWrapperFn)}else{holdResultWrapperFn();try{for(var outputs_1=__values(outputs),outputs_1_1=outputs_1.next();!outputs_1_1.done;outputs_1_1=outputs_1.next()){var output=outputs_1_1.value;output.dataSync()}}catch(e_1_1){e_1={error:e_1_1}}finally{try{if(outputs_1_1&&!outputs_1_1.done&&(_a=outputs_1.return))_a.call(outputs_1)}finally{if(e_1)throw e_1.error}}timer=Promise.resolve({kernelMs:now()-start})}if(env().getBool("CHECK_COMPUTATION_FOR_ERRORS")){var _loop_1=function(i){var output=outputs[i];output.data().then(function(tensorVals){checkComputationForErrors(tensorVals,output.dtype,kernelName)})};for(var i=0;i<outputs.length;i++){_loop_1(i)}}var kernelProfile={kernelName:kernelName,outputs:outputs,inputs:inputs,timeMs:timer.then(function(timing){return timing.kernelMs}),extraInfo:timer.then(function(timing){return timing.getExtraProfileInfo!=null?timing.getExtraProfileInfo():""})};return kernelProfile};Profiler.prototype.logKernelProfile=function(kernelProfile){var _this=this;var kernelName=kernelProfile.kernelName,outputs=kernelProfile.outputs,timeMs=kernelProfile.timeMs,inputs=kernelProfile.inputs,extraInfo=kernelProfile.extraInfo;outputs.forEach(function(result){Promise.all([result.data(),timeMs,extraInfo]).then(function(valueContainer){_this.logger.logKernelProfile(kernelName,result,valueContainer[0],valueContainer[1],inputs,valueContainer[2])})})};return Profiler}();function checkComputationForErrors(vals,dtype,kernelName){if(dtype!=="float32"){return false}for(var i=0;i<vals.length;i++){var num=vals[i];if(isNaN(num)||!isFinite(num)){console.warn("Found "+num+" in the result of '"+kernelName+"'");return true}}return false}var Logger=function(){function Logger(){}Logger.prototype.logKernelProfile=function(name,result,vals,timeMs,inputs,extraInfo){var time=typeof timeMs==="number"?rightPad(timeMs+"ms",9):timeMs["error"];var paddedName=rightPad(name,25);var rank=result.rank;var size=result.size;var shape=rightPad(result.shape.toString(),14);var inputShapesDescription="";for(var name_1 in inputs){var input=inputs[name_1];if(input!=null){var inputShape=input.shape||result.shape;var inputRank=inputShape.length;inputShapesDescription+=name_1+": "+inputRank+"D "+(inputRank>0?inputShape:"")+" "}}console.log("%c"+paddedName+"\t%c"+time+"\t%c"+rank+"D "+shape+"\t%c"+size+"\t%c"+inputShapesDescription+"\t%c"+extraInfo,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")};return Logger}();function getFilteredNodesXToY(tape,xs,y){var tensorsFromX={};var nodesFromX={};for(var i=0;i<xs.length;i++){tensorsFromX[xs[i].id]=true}for(var i=0;i<tape.length;i++){var node=tape[i];var nodeInputs=node.inputs;for(var inputName in nodeInputs){var input=nodeInputs[inputName];var anyInputFromX=false;for(var j=0;j<xs.length;j++){if(tensorsFromX[input.id]){node.outputs.forEach(function(output){return tensorsFromX[output.id]=true});anyInputFromX=true;nodesFromX[node.id]=true;break}}if(anyInputFromX){break}}}var tensorsLeadToY={};tensorsLeadToY[y.id]=true;var nodesToY={};for(var i=tape.length-1;i>=0;i--){var node=tape[i];var nodeInputs=node.inputs;for(var j=0;j<node.outputs.length;j++){if(tensorsLeadToY[node.outputs[j].id]){for(var inputName in nodeInputs){tensorsLeadToY[nodeInputs[inputName].id]=true;nodesToY[node.id]=true}break}}}var filteredTape=[];for(var i=0;i<tape.length;i++){var node=tape[i];if(nodesFromX[node.id]&&nodesToY[node.id]){var prunedInputs={};for(var inputName in node.inputs){var nodeInput=node.inputs[inputName];if(tensorsFromX[nodeInput.id]){prunedInputs[inputName]=nodeInput}}var prunedNode=Object.assign({},node);prunedNode.inputs=prunedInputs;prunedNode.outputs=node.outputs;filteredTape.push(prunedNode)}}return filteredTape}function backpropagateGradients(tensorAccumulatedGradientMap,filteredTape,tidy,add){var _loop_1=function(i){var node=filteredTape[i];var dys=[];node.outputs.forEach(function(o){var gradTensor=tensorAccumulatedGradientMap[o.id];if(gradTensor!=null){dys.push(gradTensor)}else{dys.push(null)}});if(node.gradient==null){throw new Error("Cannot compute gradient: gradient function not found "+("for "+node.kernelName+"."))}var inputGradients=node.gradient(dys);var _loop_2=function(inputName){if(!(inputName in inputGradients)){throw new Error("Cannot backprop through input "+inputName+". "+("Available gradients found: "+Object.keys(inputGradients)+"."))}var dx=tidy(function(){return inputGradients[inputName]()});if(dx.dtype!=="float32"){throw new Error("Error in gradient for op "+node.kernelName+". The gradient of input "+(inputName+" must have 'float32' dtype, but has '"+dx.dtype+"'"))}var x=node.inputs[inputName];if(!arraysEqual(dx.shape,x.shape)){throw new Error("Error in gradient for op "+node.kernelName+". The gradient of input "+("'"+inputName+"' has shape '"+dx.shape+"', which does not match ")+("the shape of the input '"+x.shape+"'"))}if(tensorAccumulatedGradientMap[x.id]==null){tensorAccumulatedGradientMap[x.id]=dx}else{var curGradient=tensorAccumulatedGradientMap[x.id];tensorAccumulatedGradientMap[x.id]=add(curGradient,dx);curGradient.dispose()}};for(var inputName in node.inputs){_loop_2(inputName)}};for(var i=filteredTape.length-1;i>=0;i--){_loop_1(i)}}var FORMAT_LIMIT_NUM_VALS=20;var FORMAT_NUM_FIRST_LAST_VALS=3;var FORMAT_NUM_SIG_DIGITS=7;function tensorToString(vals,shape,dtype,verbose){var strides=computeStrides(shape);var padPerCol=computeMaxSizePerColumn(vals,shape,dtype,strides);var rank=shape.length;var valsLines=subTensorToString(vals,shape,dtype,strides,padPerCol);var lines=["Tensor"];if(verbose){lines.push("  dtype: "+dtype);lines.push("  rank: "+rank);lines.push("  shape: ["+shape+"]");lines.push("  values:")}lines.push(valsLines.map(function(l){return"    "+l}).join("\n"));return lines.join("\n")}function computeMaxSizePerColumn(vals,shape,dtype,strides){var n=sizeFromShape(shape);var numCols=strides[strides.length-1];var padPerCol=new Array(numCols).fill(0);var rank=shape.length;var valuesOrTuples=dtype==="complex64"?createComplexTuples(vals):vals;if(rank>1){for(var row=0;row<n/numCols;row++){var offset=row*numCols;for(var j=0;j<numCols;j++){padPerCol[j]=Math.max(padPerCol[j],valToString(valuesOrTuples[offset+j],0,dtype).length)}}}return padPerCol}function valToString(val,pad,dtype){var valStr;if(Array.isArray(val)){valStr=parseFloat(val[0].toFixed(FORMAT_NUM_SIG_DIGITS))+" + "+(parseFloat(val[1].toFixed(FORMAT_NUM_SIG_DIGITS))+"j")}else if(isString(val)){valStr="'"+val+"'"}else if(dtype==="bool"){valStr=boolNumToString(val)}else{valStr=parseFloat(val.toFixed(FORMAT_NUM_SIG_DIGITS)).toString()}return rightPad(valStr,pad)}function boolNumToString(v){return v===0?"false":"true"}function subTensorToString(vals,shape,dtype,strides,padPerCol,isLast){if(isLast===void 0){isLast=true}var storagePerElement=dtype==="complex64"?2:1;var size=shape[0];var rank=shape.length;if(rank===0){if(dtype==="complex64"){var complexTuple=createComplexTuples(vals);return[valToString(complexTuple[0],0,dtype)]}if(dtype==="bool"){return[boolNumToString(vals[0])]}return[vals[0].toString()]}if(rank===1){if(size>FORMAT_LIMIT_NUM_VALS){var firstValsSize=FORMAT_NUM_FIRST_LAST_VALS*storagePerElement;var firstVals=Array.from(vals.slice(0,firstValsSize));var lastVals=Array.from(vals.slice((size-FORMAT_NUM_FIRST_LAST_VALS)*storagePerElement,size*storagePerElement));if(dtype==="complex64"){firstVals=createComplexTuples(firstVals);lastVals=createComplexTuples(lastVals)}return["["+firstVals.map(function(x,i){return valToString(x,padPerCol[i],dtype)}).join(", ")+", ..., "+lastVals.map(function(x,i){return valToString(x,padPerCol[size-FORMAT_NUM_FIRST_LAST_VALS+i],dtype)}).join(", ")+"]"]}var displayVals=dtype==="complex64"?createComplexTuples(vals):Array.from(vals);return["["+displayVals.map(function(x,i){return valToString(x,padPerCol[i],dtype)}).join(", ")+"]"]}var subshape=shape.slice(1);var substrides=strides.slice(1);var stride=strides[0]*storagePerElement;var lines=[];if(size>FORMAT_LIMIT_NUM_VALS){for(var i=0;i<FORMAT_NUM_FIRST_LAST_VALS;i++){var start=i*stride;var end=start+stride;lines.push.apply(lines,__spread(subTensorToString(vals.slice(start,end),subshape,dtype,substrides,padPerCol,false)))}lines.push("...");for(var i=size-FORMAT_NUM_FIRST_LAST_VALS;i<size;i++){var start=i*stride;var end=start+stride;lines.push.apply(lines,__spread(subTensorToString(vals.slice(start,end),subshape,dtype,substrides,padPerCol,i===size-1)))}}else{for(var i=0;i<size;i++){var start=i*stride;var end=start+stride;lines.push.apply(lines,__spread(subTensorToString(vals.slice(start,end),subshape,dtype,substrides,padPerCol,i===size-1)))}}var sep=rank===2?",":"";lines[0]="["+lines[0]+sep;for(var i=1;i<lines.length-1;i++){lines[i]=" "+lines[i]+sep}var newLineSep=",\n";for(var i=2;i<rank;i++){newLineSep+="\n"}lines[lines.length-1]=" "+lines[lines.length-1]+"]"+(isLast?"":newLineSep);return lines}function createComplexTuples(vals){var complexTuples=[];for(var i=0;i<vals.length;i+=2){complexTuples.push([vals[i],vals[i+1]])}return complexTuples}var TensorBuffer=function(){function TensorBuffer(shape,dtype,values){var _this=this;this.dtype=dtype;this.shape=shape.slice();this.size=sizeFromShape(shape);if(values!=null){var n_1=values.length;assert(n_1===this.size,function(){return"Length of values '"+n_1+"' does not match the size "+("inferred by the shape '"+_this.size+"'.")})}if(dtype==="complex64"){throw new Error("complex64 dtype TensorBuffers are not supported. Please create "+"a TensorBuffer for the real and imaginary parts separately and "+"call tf.complex(real, imag).")}this.values=values||getArrayFromDType(dtype,this.size);this.strides=computeStrides(shape)}TensorBuffer.prototype.set=function(value){var _this=this;var locs=[];for(var _i=1;_i<arguments.length;_i++){locs[_i-1]=arguments[_i]}if(locs.length===0){locs=[0]}assert(locs.length===this.rank,function(){return"The number of provided coordinates ("+locs.length+") must "+("match the rank ("+_this.rank+")")});var index=this.locToIndex(locs);this.values[index]=value};TensorBuffer.prototype.get=function(){var e_1,_b;var locs=[];for(var _i=0;_i<arguments.length;_i++){locs[_i]=arguments[_i]}if(locs.length===0){locs=[0]}var i=0;try{for(var locs_1=__values(locs),locs_1_1=locs_1.next();!locs_1_1.done;locs_1_1=locs_1.next()){var loc=locs_1_1.value;if(loc<0||loc>=this.shape[i]){var msg="Requested out of range element at "+locs+". "+("  Buffer shape="+this.shape);throw new Error(msg)}i++}}catch(e_1_1){e_1={error:e_1_1}}finally{try{if(locs_1_1&&!locs_1_1.done&&(_b=locs_1.return))_b.call(locs_1)}finally{if(e_1)throw e_1.error}}var index=locs[locs.length-1];for(var i_1=0;i_1<locs.length-1;++i_1){index+=this.strides[i_1]*locs[i_1]}return this.values[index]};TensorBuffer.prototype.locToIndex=function(locs){if(this.rank===0){return 0}else if(this.rank===1){return locs[0]}var index=locs[locs.length-1];for(var i=0;i<locs.length-1;++i){index+=this.strides[i]*locs[i]}return index};TensorBuffer.prototype.indexToLoc=function(index){if(this.rank===0){return[]}else if(this.rank===1){return[index]}var locs=new Array(this.shape.length);for(var i=0;i<locs.length-1;++i){locs[i]=Math.floor(index/this.strides[i]);index-=locs[i]*this.strides[i]}locs[locs.length-1]=index;return locs};Object.defineProperty(TensorBuffer.prototype,"rank",{get:function(){return this.shape.length},enumerable:true,configurable:true});TensorBuffer.prototype.toTensor=function(){return trackerFn().makeTensor(this.values,this.shape,this.dtype)};return TensorBuffer}();var trackerFn=null;var opHandler=null;function setTensorTracker(fn){trackerFn=fn}var Tensor=function(){function Tensor(shape,dtype,dataId,id){this.kept=false;this.isDisposedInternal=false;this.shape=shape.slice();this.dtype=dtype||"float32";this.size=sizeFromShape(shape);this.strides=computeStrides(shape);this.dataId=dataId;this.id=id;this.rankType=this.rank<5?this.rank.toString():"higher"}Object.defineProperty(Tensor.prototype,"rank",{get:function(){return this.shape.length},enumerable:true,configurable:true});Tensor.prototype.buffer=function(){return __awaiter(this,void 0,void 0,function(){var vals;return __generator(this,function(_b){switch(_b.label){case 0:return[4,this.data()];case 1:vals=_b.sent();return[2,opHandler.buffer(this.shape,this.dtype,vals)]}})})};Tensor.prototype.bufferSync=function(){return opHandler.buffer(this.shape,this.dtype,this.dataSync())};Tensor.prototype.array=function(){return __awaiter(this,void 0,void 0,function(){var vals;return __generator(this,function(_b){switch(_b.label){case 0:return[4,this.data()];case 1:vals=_b.sent();return[2,toNestedArray(this.shape,vals,this.dtype==="complex64")]}})})};Tensor.prototype.arraySync=function(){return toNestedArray(this.shape,this.dataSync(),this.dtype==="complex64")};Tensor.prototype.data=function(){return __awaiter(this,void 0,void 0,function(){var data,bytes;return __generator(this,function(_b){switch(_b.label){case 0:this.throwIfDisposed();data=trackerFn().read(this.dataId);if(!(this.dtype==="string"))return[3,2];return[4,data];case 1:bytes=_b.sent();try{return[2,bytes.map(function(b){return decodeString(b)})]}catch(_a){throw new Error("Failed to decode the string bytes into utf-8. "+"To get the original bytes, call tensor.bytes().")}_b.label=2;case 2:return[2,data]}})})};Tensor.prototype.dataSync=function(){this.throwIfDisposed();var data=trackerFn().readSync(this.dataId);if(this.dtype==="string"){try{return data.map(function(b){return decodeString(b)})}catch(_a){throw new Error("Failed to decode the string bytes into utf-8. "+"To get the original bytes, call tensor.bytes().")}}return data};Tensor.prototype.bytes=function(){return __awaiter(this,void 0,void 0,function(){var data;return __generator(this,function(_b){switch(_b.label){case 0:this.throwIfDisposed();return[4,trackerFn().read(this.dataId)];case 1:data=_b.sent();if(this.dtype==="string"){return[2,data]}else{return[2,new Uint8Array(data.buffer)]}}})})};Tensor.prototype.dispose=function(){if(this.isDisposed){return}trackerFn().disposeTensor(this);this.isDisposedInternal=true};Object.defineProperty(Tensor.prototype,"isDisposed",{get:function(){return this.isDisposedInternal},enumerable:true,configurable:true});Tensor.prototype.throwIfDisposed=function(){if(this.isDisposed){throw new Error("Tensor is disposed.")}};Tensor.prototype.print=function(verbose){if(verbose===void 0){verbose=false}return opHandler.print(this,verbose)};Tensor.prototype.clone=function(){this.throwIfDisposed();return opHandler.clone(this)};Tensor.prototype.toString=function(verbose){if(verbose===void 0){verbose=false}var vals=this.dataSync();return tensorToString(vals,this.shape,this.dtype,verbose)};Tensor.prototype.cast=function(dtype){this.throwIfDisposed();return opHandler.cast(this,dtype)};Tensor.prototype.variable=function(trainable,name,dtype){if(trainable===void 0){trainable=true}this.throwIfDisposed();return trackerFn().makeVariable(this,trainable,name,dtype)};return Tensor}();Object.defineProperty(Tensor,Symbol.hasInstance,{value:function(instance){return!!instance&&instance.data!=null&&instance.dataSync!=null&&instance.throwIfDisposed!=null}});function getGlobalTensorClass(){return getGlobal("Tensor",function(){return Tensor})}getGlobalTensorClass();var Variable=function(_super){__extends(Variable,_super);function Variable(initialValue,trainable,name,tensorId){var _this=_super.call(this,initialValue.shape,initialValue.dtype,initialValue.dataId,tensorId)||this;_this.trainable=trainable;_this.name=name;return _this}Variable.prototype.assign=function(newValue){if(newValue.dtype!==this.dtype){throw new Error("dtype of the new value ("+newValue.dtype+") and "+("previous value ("+this.dtype+") must match"))}if(!arraysEqual(newValue.shape,this.shape)){throw new Error("shape of the new value ("+newValue.shape+") and "+("previous value ("+this.shape+") must match"))}trackerFn().disposeTensor(this);this.dataId=newValue.dataId;trackerFn().incRef(this,null)};Variable.prototype.dispose=function(){trackerFn().disposeVariable(this);this.isDisposedInternal=true};return Variable}(Tensor);Object.defineProperty(Variable,Symbol.hasInstance,{value:function(instance){return instance instanceof Tensor&&instance.assign!=null&&instance.assign instanceof Function}});var Rank;(function(Rank){Rank["R0"]="R0";Rank["R1"]="R1";Rank["R2"]="R2";Rank["R3"]="R3";Rank["R4"]="R4";Rank["R5"]="R5";Rank["R6"]="R6"})(Rank||(Rank={}));var UpcastInt32AndMap;(function(UpcastInt32AndMap){UpcastInt32AndMap["float32"]="float32";UpcastInt32AndMap["int32"]="int32";UpcastInt32AndMap["bool"]="int32";UpcastInt32AndMap["complex64"]="complex64"})(UpcastInt32AndMap||(UpcastInt32AndMap={}));var UpcastBoolAndMap;(function(UpcastBoolAndMap){UpcastBoolAndMap["float32"]="float32";UpcastBoolAndMap["int32"]="int32";UpcastBoolAndMap["bool"]="bool";UpcastBoolAndMap["complex64"]="complex64"})(UpcastBoolAndMap||(UpcastBoolAndMap={}));var UpcastFloat32AndMap;(function(UpcastFloat32AndMap){UpcastFloat32AndMap["float32"]="float32";UpcastFloat32AndMap["int32"]="float32";UpcastFloat32AndMap["bool"]="float32";UpcastFloat32AndMap["complex64"]="complex64"})(UpcastFloat32AndMap||(UpcastFloat32AndMap={}));var UpcastComplex64AndMap;(function(UpcastComplex64AndMap){UpcastComplex64AndMap["float32"]="complex64";UpcastComplex64AndMap["int32"]="complex64";UpcastComplex64AndMap["bool"]="complex64";UpcastComplex64AndMap["complex64"]="complex64"})(UpcastComplex64AndMap||(UpcastComplex64AndMap={}));var upcastTypeMap={float32:UpcastFloat32AndMap,int32:UpcastInt32AndMap,bool:UpcastBoolAndMap,complex64:UpcastComplex64AndMap};function upcastType(typeA,typeB){if(typeA==="string"||typeB==="string"){if(typeA==="string"&&typeB==="string"){return"string"}throw new Error("Can not upcast "+typeA+" with "+typeB)}return upcastTypeMap[typeA][typeB]}function makeTypesMatch(a,b){if(a.dtype===b.dtype){return[a,b]}var dtype=upcastType(a.dtype,b.dtype);return[a.cast(dtype),b.cast(dtype)]}function assertTypesMatch(a,b){assert(a.dtype===b.dtype,function(){return"The dtypes of the first("+a.dtype+") and"+(" second("+b.dtype+") input must match")})}function getTensorsInContainer(result){var list=[];var seen=new Set;walkTensorContainer(result,list,seen);return list}function walkTensorContainer(container,list,seen){if(container==null){return}if(container instanceof Tensor){list.push(container);return}if(!isIterable(container)){return}var iterable=container;for(var k in iterable){var val=iterable[k];if(!seen.has(val)){seen.add(val);walkTensorContainer(val,list,seen)}}}function isIterable(obj){return Array.isArray(obj)||typeof obj==="object"}function isRegisteredKernelInvocation(kernelInvocation){return kernelInvocation.kernelName!=null}var EngineState=function(){function EngineState(){this.registeredVariables={};this.nextTapeNodeId=0;this.numBytes=0;this.numTensors=0;this.numStringTensors=0;this.numDataBuffers=0;this.gradientDepth=0;this.kernelDepth=0;this.scopeStack=[];this.numDataMovesStack=[];this.nextScopeId=0;this.tensorInfo=new WeakMap;this.profiling=false;this.activeProfile={newBytes:0,newTensors:0,peakBytes:0,kernels:[],result:null,get kernelNames(){return Array.from(new Set(this.kernels.map(function(k){return k.name})))}}}EngineState.prototype.dispose=function(){for(var variableName in this.registeredVariables){this.registeredVariables[variableName].dispose()}};return EngineState}();var Engine=function(){function Engine(ENV){this.ENV=ENV;this.registry={};this.registryFactory={};this.pendingBackendInitId=0;this.state=new EngineState}Engine.prototype.ready=function(){return __awaiter(this,void 0,void 0,function(){var sortedBackends,i,backendName,success;return __generator(this,function(_a){switch(_a.label){case 0:if(this.pendingBackendInit!=null){return[2,this.pendingBackendInit.then(function(){})]}if(this.backendInstance!=null){return[2]}sortedBackends=this.getSortedBackends();i=0;_a.label=1;case 1:if(!(i<sortedBackends.length))return[3,5];backendName=sortedBackends[i];return[4,this.initializeBackend(backendName).success];case 2:success=_a.sent();if(!success)return[3,4];return[4,this.setBackend(backendName)];case 3:_a.sent();return[2];case 4:i++;return[3,1];case 5:throw new Error("Could not initialize any backends, all backend initializations "+"failed.")}})})};Object.defineProperty(Engine.prototype,"backend",{get:function(){if(this.pendingBackendInit!=null){throw new Error("Backend '"+this.backendName+"' has not yet been initialized. Make "+"sure to await tf.ready() or await tf.setBackend() before calling "+"other methods")}if(this.backendInstance==null){var _a=this.initializeBackendsAndReturnBest(),name=_a.name,asyncInit=_a.asyncInit;if(asyncInit){throw new Error("The highest priority backend '"+name+"' has not yet been "+"initialized. Make sure to await tf.ready() or "+"await tf.setBackend() before calling other methods")}this.setBackend(name)}return this.backendInstance},enumerable:true,configurable:true});Engine.prototype.backendNames=function(){return Object.keys(this.registryFactory)};Engine.prototype.findBackend=function(backendName){if(!(backendName in this.registry)){if(backendName in this.registryFactory){var asyncInit=this.initializeBackend(backendName).asyncInit;if(asyncInit){return null}}else{return null}}return this.registry[backendName]};Engine.prototype.findBackendFactory=function(backendName){if(!(backendName in this.registryFactory)){return null}return this.registryFactory[backendName].factory};Engine.prototype.registerBackend=function(backendName,factory,priority){if(priority===void 0){priority=1}if(backendName in this.registryFactory){warn(backendName+" backend was already registered. "+"Reusing existing backend factory.");return false}this.registryFactory[backendName]={factory:factory,priority:priority};return true};Engine.prototype.setBackend=function(backendName){return __awaiter(this,void 0,void 0,function(){var _a,success,asyncInit,result,_b;return __generator(this,function(_c){switch(_c.label){case 0:if(this.registryFactory[backendName]==null){throw new Error("Backend name '"+backendName+"' not found in registry")}this.backendName=backendName;if(!(this.registry[backendName]==null))return[3,4];this.backendInstance=null;_a=this.initializeBackend(backendName),success=_a.success,asyncInit=_a.asyncInit;if(!asyncInit)return[3,2];return[4,success];case 1:_b=_c.sent();return[3,3];case 2:_b=success;_c.label=3;case 3:result=_b;if(!result){return[2,false]}_c.label=4;case 4:this.backendInstance=this.registry[backendName];this.setupRegisteredKernels();this.profiler=new Profiler(this.backendInstance);return[2,true]}})})};Engine.prototype.setupRegisteredKernels=function(){var _this=this;var kernels=getKernelsForBackend(this.backendName);kernels.forEach(function(kernel){if(kernel.setupFunc!=null){kernel.setupFunc(_this.backendInstance)}})};Engine.prototype.disposeRegisteredKernels=function(backendName){var _this=this;var kernels=getKernelsForBackend(backendName);kernels.forEach(function(kernel){if(kernel.disposeFunc!=null){kernel.disposeFunc(_this.registry[backendName])}})};Engine.prototype.initializeBackend=function(backendName){var _this=this;var registryFactoryEntry=this.registryFactory[backendName];if(registryFactoryEntry==null){throw new Error("Cannot initialize backend "+backendName+", no registration found.")}try{var backend=registryFactoryEntry.factory();if(backend&&!(backend instanceof KernelBackend)&&typeof backend.then==="function"){var promiseId_1=++this.pendingBackendInitId;var success=backend.then(function(backendInstance){if(promiseId_1<_this.pendingBackendInitId){return false}_this.registry[backendName]=backendInstance;_this.pendingBackendInit=null;return true}).catch(function(err){if(promiseId_1<_this.pendingBackendInitId){return false}_this.pendingBackendInit=null;warn("Initialization of backend "+backendName+" failed");warn(err.stack||err.message);return false});this.pendingBackendInit=success;return{success:success,asyncInit:true}}else{this.registry[backendName]=backend;return{success:true,asyncInit:false}}}catch(err){warn("Initialization of backend "+backendName+" failed");warn(err.stack||err.message);return{success:false,asyncInit:false}}};Engine.prototype.removeBackend=function(backendName){if(!(backendName in this.registryFactory)){throw new Error(backendName+" backend not found in registry")}if(this.backendName===backendName&&this.pendingBackendInit!=null){this.pendingBackendInitId++}if(backendName in this.registry){this.disposeRegisteredKernels(backendName);this.registry[backendName].dispose();delete this.registry[backendName]}delete this.registryFactory[backendName];if(this.backendName===backendName){this.pendingBackendInit=null;this.backendName=null;this.backendInstance=null}};Engine.prototype.getSortedBackends=function(){var _this=this;if(Object.keys(this.registryFactory).length===0){throw new Error("No backend found in registry.")}return Object.keys(this.registryFactory).sort(function(a,b){return _this.registryFactory[b].priority-_this.registryFactory[a].priority})};Engine.prototype.initializeBackendsAndReturnBest=function(){var sortedBackends=this.getSortedBackends();for(var i=0;i<sortedBackends.length;i++){var backendName=sortedBackends[i];var _a=this.initializeBackend(backendName),success=_a.success,asyncInit=_a.asyncInit;if(asyncInit||success){return{name:backendName,asyncInit:asyncInit}}}throw new Error("Could not initialize any backends, all backend initializations "+"failed.")};Engine.prototype.moveData=function(backend,dataId){var info=this.state.tensorInfo.get(dataId);var srcBackend=info.backend;var values=this.readSync(dataId);var refCount=srcBackend.refCount(dataId);srcBackend.disposeData(dataId,true);info.backend=backend;backend.move(dataId,values,info.shape,info.dtype,refCount);if(this.shouldCheckForMemLeaks()){this.state.numDataMovesStack[this.state.numDataMovesStack.length-1]++}};Engine.prototype.tidy=function(nameOrFn,fn){var _this=this;var name=null;if(fn==null){if(typeof nameOrFn!=="function"){throw new Error("Please provide a function to tidy()")}fn=nameOrFn}else{if(typeof nameOrFn!=="string"&&!(nameOrFn instanceof String)){throw new Error("When calling with two arguments, the first argument "+"to tidy() must be a string")}if(typeof fn!=="function"){throw new Error("When calling with two arguments, the 2nd argument "+"to tidy() must be a function")}name=nameOrFn}var result;return this.scopedRun(function(){return _this.startScope(name)},function(){return _this.endScope(result)},function(){result=fn();if(result instanceof Promise){console.error("Cannot return a Promise inside of tidy.")}return result})};Engine.prototype.scopedRun=function(start,end,f){start();try{var res=f();end();return res}catch(ex){end();throw ex}};Engine.prototype.nextTensorId=function(){return Engine.nextTensorId++};Engine.prototype.nextVariableId=function(){return Engine.nextVariableId++};Engine.prototype.clone=function(x){var y=ENGINE.runKernel(Identity,{x:x});var inputs={x:x};var grad=function(dy){return{x:function(){var dtype="float32";var gradInputs={x:dy};var attrs={dtype:dtype};return ENGINE.runKernel(Cast,gradInputs,attrs)}}};var saved=[];this.addTapeNode(this.state.activeScope.name,inputs,[y],grad,saved,{});return y};Engine.prototype.runKernel=function(kernelName,inputs,attrs){if(this.backendName==null){this.backend}var hasKernel=getKernel(kernelName,this.backendName)!=null;if(!hasKernel){throw new Error("Kernel '"+kernelName+"' not registered for backend '"+this.backendName+"'")}return this.runKernelFunc({kernelName:kernelName,inputs:inputs,attrs:attrs})};Engine.prototype.shouldCheckForMemLeaks=function(){return this.ENV.getBool("IS_TEST")};Engine.prototype.checkKernelForMemLeak=function(kernelName,numDataIdsBefore,outInfos){var numDataIdsAfter=this.backend.numDataIds();var numOutputDataIds=0;outInfos.forEach(function(info){numOutputDataIds+=info.dtype==="complex64"?3:1});var numMoves=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1];var dataIdsLeaked=numDataIdsAfter-numDataIdsBefore-numOutputDataIds-numMoves;if(dataIdsLeaked>0){throw new Error("Backend '"+this.backendName+"' has an internal memory leak "+("("+dataIdsLeaked+" data ids) after running '"+kernelName+"'"))}};Engine.prototype.runKernelFunc=function(kernelParams){var _this=this;var outputs;var saved=[];var isTapeOn=this.isTapeOn();var startingBytecount=this.state.numBytes;var startingNumTensors=this.state.numTensors;if(this.shouldCheckForMemLeaks()){this.state.numDataMovesStack.push(0)}var kernelFunc;if(this.backendName==null){this.backend}var out;var kernelOrScopeName=isRegisteredKernelInvocation(kernelParams)?kernelParams.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(isRegisteredKernelInvocation(kernelParams)){var kernelName_1=kernelParams.kernelName,inputs_1=kernelParams.inputs,attrs_1=kernelParams.attrs;if(this.backendName==null){this.backend}var kernel_1=getKernel(kernelName_1,this.backendName);assert(kernel_1!=null,function(){return"Cannot find registered kernel '"+kernelName_1+"' for backend '"+_this.backendName+"'"});kernelFunc=function(){var numDataIdsBefore=_this.backend.numDataIds();out=kernel_1.kernelFunc({inputs:inputs_1,attrs:attrs_1,backend:_this.backend});var outInfos=Array.isArray(out)?out:[out];if(_this.shouldCheckForMemLeaks()){_this.checkKernelForMemLeak(kernelName_1,numDataIdsBefore,outInfos)}var outTensors=outInfos.map(function(outInfo){if(outInfo.rank!=null){return outInfo}var dataId=outInfo.dataId,shape=outInfo.shape,dtype=outInfo.dtype;return _this.makeTensorFromDataId(dataId,shape,dtype)});if(isTapeOn){var tensorsToSave=_this.getTensorsForGradient(kernelName_1,inputs_1,outTensors);saved=_this.saveTensorsForBackwardMode(tensorsToSave)}return outTensors}}else{var forwardFunc_1=kernelParams.forwardFunc;var saveFunc_1=function(tensors){if(!isTapeOn){return}saved=tensors.map(function(tensor){return _this.keep(_this.clone(tensor))})};kernelFunc=function(){var numDataIdsBefore=_this.backend.numDataIds();out=_this.tidy(function(){return forwardFunc_1(_this.backend,saveFunc_1)});var outs=Array.isArray(out)?out:[out];if(_this.shouldCheckForMemLeaks()){_this.checkKernelForMemLeak(kernelOrScopeName,numDataIdsBefore,outs)}return outs}}var inputs=kernelParams.inputs,attrs=kernelParams.attrs;var backwardsFunc=isRegisteredKernelInvocation(kernelParams)?null:kernelParams.backwardsFunc;var kernelProfile;this.scopedRun(function(){return _this.state.kernelDepth++},function(){return _this.state.kernelDepth--},function(){if(!_this.ENV.getBool("DEBUG")&&!_this.state.profiling){outputs=kernelFunc()}else{kernelProfile=_this.profiler.profileKernel(kernelOrScopeName,inputs,function(){return kernelFunc()});if(_this.ENV.getBool("DEBUG")){_this.profiler.logKernelProfile(kernelProfile)}outputs=kernelProfile.outputs}});if(isTapeOn){this.addTapeNode(kernelOrScopeName,inputs,outputs,backwardsFunc,saved,attrs)}if(this.state.profiling){this.state.activeProfile.kernels.push({name:kernelOrScopeName,bytesAdded:this.state.numBytes-startingBytecount,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-startingNumTensors,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(inputs).map(function(key){return inputs[key]!=null?inputs[key].shape:null}),outputShapes:outputs.map(function(item){return item.shape}),kernelTimeMs:kernelProfile.timeMs,extraInfo:kernelProfile.extraInfo})}return Array.isArray(out)?outputs:outputs[0]};Engine.prototype.saveTensorsForBackwardMode=function(tensors){var _this=this;var saved=tensors.map(function(tensor){return _this.keep(_this.clone(tensor))});return saved};Engine.prototype.getTensorsForGradient=function(kernelName,inputs,outputs){var gradConfig=getGradient(kernelName);if(gradConfig!=null){var inputsToSave=gradConfig.inputsToSave||[];var outputsToSave_1=gradConfig.outputsToSave||[];var inputTensorsToSave=void 0;if(gradConfig.saveAllInputs){assert(Array.isArray(inputs),function(){return"saveAllInputs is true, expected inputs to be an array."});inputTensorsToSave=Object.keys(inputs).map(function(key){return inputs[key]})}else{inputTensorsToSave=inputsToSave.map(function(inputName){return inputs[inputName]})}var outputTensorsToSave=outputs.filter(function(_,i){return outputsToSave_1[i]});return inputTensorsToSave.concat(outputTensorsToSave)}return[]};Engine.prototype.makeTensor=function(values,shape,dtype,backend){if(values==null){throw new Error("Values passed to engine.makeTensor() are null")}dtype=dtype||"float32";backend=backend||this.backend;var backendVals=values;if(dtype==="string"&&isString(values[0])){backendVals=values.map(function(d){return encodeString(d)})}var dataId=backend.write(backendVals,shape,dtype);var t=new Tensor(shape,dtype,dataId,this.nextTensorId());this.trackTensor(t,backend);if(dtype==="string"){var info=this.state.tensorInfo.get(dataId);var newBytes=bytesFromStringArray(backendVals);this.state.numBytes+=newBytes-info.bytes;info.bytes=newBytes}return t};Engine.prototype.makeTensorFromDataId=function(dataId,shape,dtype,backend){dtype=dtype||"float32";var t=new Tensor(shape,dtype,dataId,this.nextTensorId());this.trackTensor(t,backend);return t};Engine.prototype.makeVariable=function(initialValue,trainable,name,dtype){if(trainable===void 0){trainable=true}name=name||this.nextVariableId().toString();if(dtype!=null&&dtype!==initialValue.dtype){initialValue=initialValue.cast(dtype)}var v=new Variable(initialValue,trainable,name,this.nextTensorId());if(this.state.registeredVariables[v.name]!=null){throw new Error("Variable with name "+v.name+" was already registered")}this.state.registeredVariables[v.name]=v;this.incRef(v,this.backend);return v};Engine.prototype.trackTensor=function(a,backend){this.state.numTensors++;if(a.dtype==="string"){this.state.numStringTensors++}var bytes=0;if(a.dtype!=="complex64"&&a.dtype!=="string"){bytes=a.size*bytesPerElement(a.dtype)}this.state.numBytes+=bytes;if(!this.state.tensorInfo.has(a.dataId)){this.state.numDataBuffers++;this.state.tensorInfo.set(a.dataId,{backend:backend||this.backend,dtype:a.dtype,shape:a.shape,bytes:bytes})}if(!(a instanceof Variable)){this.track(a)}};Engine.prototype.incRef=function(a,backend){this.trackTensor(a,backend);this.backend.incRef(a.dataId)};Engine.prototype.removeDataId=function(dataId,backend){if(this.state.tensorInfo.has(dataId)&&this.state.tensorInfo.get(dataId).backend===backend){this.state.tensorInfo.delete(dataId);this.state.numDataBuffers--}};Engine.prototype.disposeTensor=function(a){if(!this.state.tensorInfo.has(a.dataId)){return}var info=this.state.tensorInfo.get(a.dataId);this.state.numTensors--;if(a.dtype==="string"){this.state.numStringTensors--;this.state.numBytes-=info.bytes}if(a.dtype!=="complex64"&&a.dtype!=="string"){var bytes=a.size*bytesPerElement(a.dtype);this.state.numBytes-=bytes}if(info.backend.disposeData(a.dataId)){this.removeDataId(a.dataId,info.backend)}};Engine.prototype.disposeVariables=function(){for(var varName in this.state.registeredVariables){var v=this.state.registeredVariables[varName];this.disposeVariable(v)}};Engine.prototype.disposeVariable=function(v){this.disposeTensor(v);if(this.state.registeredVariables[v.name]!=null){delete this.state.registeredVariables[v.name]}};Engine.prototype.memory=function(){var info=this.backend.memory();info.numTensors=this.state.numTensors;info.numDataBuffers=this.state.numDataBuffers;info.numBytes=this.state.numBytes;if(this.state.numStringTensors>0){info.unreliable=true;if(info.reasons==null){info.reasons=[]}info.reasons.push("Memory usage by string tensors is approximate "+"(2 bytes per character)")}return info};Engine.prototype.profile=function(query){return __awaiter(this,void 0,void 0,function(){var startBytes,startNumTensors,_a,_b,_c,kernel,_d,_e,e_1_1;var e_1,_f;return __generator(this,function(_g){switch(_g.label){case 0:this.state.profiling=true;startBytes=this.state.numBytes;startNumTensors=this.state.numTensors;this.state.activeProfile.kernels=[];_a=this.state.activeProfile;return[4,query()];case 1:_a.result=_g.sent();this.state.profiling=false;this.state.activeProfile.peakBytes=Math.max.apply(Math,__spread(this.state.activeProfile.kernels.map(function(d){return d.totalBytesSnapshot})));this.state.activeProfile.newBytes=this.state.numBytes-startBytes;this.state.activeProfile.newTensors=this.state.numTensors-startNumTensors;_g.label=2;case 2:_g.trys.push([2,8,9,10]);_b=__values(this.state.activeProfile.kernels),_c=_b.next();_g.label=3;case 3:if(!!_c.done)return[3,7];kernel=_c.value;_d=kernel;return[4,kernel.kernelTimeMs];case 4:_d.kernelTimeMs=_g.sent();_e=kernel;return[4,kernel.extraInfo];case 5:_e.extraInfo=_g.sent();_g.label=6;case 6:_c=_b.next();return[3,3];case 7:return[3,10];case 8:e_1_1=_g.sent();e_1={error:e_1_1};return[3,10];case 9:try{if(_c&&!_c.done&&(_f=_b.return))_f.call(_b)}finally{if(e_1)throw e_1.error}return[7];case 10:return[2,this.state.activeProfile]}})})};Engine.prototype.isTapeOn=function(){return this.state.gradientDepth>0&&this.state.kernelDepth===0};Engine.prototype.addTapeNode=function(kernelName,inputs,outputs,gradientsFunc,saved,attrs){var _this=this;var tapeNode={id:this.state.nextTapeNodeId++,kernelName:kernelName,inputs:inputs,outputs:outputs,saved:saved};var gradConfig=getGradient(kernelName);if(gradConfig!=null){gradientsFunc=gradConfig.gradFunc}if(gradientsFunc!=null){tapeNode.gradient=function(dys){dys=dys.map(function(dy,i){if(dy==null){var output=outputs[i];var vals=makeZerosTypedArray(output.size,output.dtype);return _this.makeTensor(vals,output.shape,output.dtype)}return dy});return gradientsFunc(dys.length>1?dys:dys[0],saved,attrs)}}this.state.activeTape.push(tapeNode)};Engine.prototype.keep=function(result){result.kept=true;return result};Engine.prototype.startTape=function(){if(this.state.gradientDepth===0){this.state.activeTape=[]}this.state.gradientDepth++};Engine.prototype.endTape=function(){this.state.gradientDepth--};Engine.prototype.startScope=function(name){var scopeInfo={track:[],name:"unnamed scope",id:this.state.nextScopeId++};if(name){scopeInfo.name=name}this.state.scopeStack.push(scopeInfo);this.state.activeScope=scopeInfo};Engine.prototype.endScope=function(result){var _this=this;var tensorsToTrackInParent=getTensorsInContainer(result);var tensorsToTrackInParentSet=new Set(tensorsToTrackInParent.map(function(t){return t.id}));for(var i=0;i<this.state.activeScope.track.length;i++){var tensor=this.state.activeScope.track[i];if(!tensor.kept&&!tensorsToTrackInParentSet.has(tensor.id)){tensor.dispose()}}var oldScope=this.state.scopeStack.pop();this.state.activeScope=this.state.scopeStack.length===0?null:this.state.scopeStack[this.state.scopeStack.length-1];tensorsToTrackInParent.forEach(function(tensor){if(!tensor.kept&&tensor.scopeId===oldScope.id){_this.track(tensor)}})};Engine.prototype.gradients=function(f,xs,dy,allowNoGradients){var _this=this;if(allowNoGradients===void 0){allowNoGradients=false}assert(xs.length>0,function(){return"gradients() received an empty list of xs."});if(dy!=null&&dy.dtype!=="float32"){throw new Error("dy must have 'float32' dtype, but has '"+dy.dtype+"'")}var y=this.scopedRun(function(){return _this.startTape()},function(){return _this.endTape()},function(){return _this.tidy("forward",f)});assert(y instanceof Tensor,function(){return"The result y returned by f() must be a tensor."});var filteredTape=getFilteredNodesXToY(this.state.activeTape,xs,y);if(!allowNoGradients&&filteredTape.length===0&&xs.length>0){throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure "+"that the f you passed encloses all operations that lead from x "+"to y.")}return this.tidy("backward",function(){var accumulatedGradientMap={};accumulatedGradientMap[y.id]=dy==null?ones$1(y.shape):dy;backpropagateGradients(accumulatedGradientMap,filteredTape,function(f){return _this.tidy(f)},add$1);var grads=xs.map(function(x){return accumulatedGradientMap[x.id]});if(_this.state.gradientDepth===0){_this.state.activeTape.forEach(function(node){var e_2,_a;try{for(var _b=__values(node.saved),_c=_b.next();!_c.done;_c=_b.next()){var tensor=_c.value;tensor.dispose()}}catch(e_2_1){e_2={error:e_2_1}}finally{try{if(_c&&!_c.done&&(_a=_b.return))_a.call(_b)}finally{if(e_2)throw e_2.error}}});_this.state.activeTape=null}return{value:y,grads:grads}})};Engine.prototype.customGrad=function(f){var _this=this;assert(isFunction(f),function(){return"The f passed in customGrad(f) must be a function."});return function(){var inputs=[];for(var _i=0;_i<arguments.length;_i++){inputs[_i]=arguments[_i]}assert(inputs.every(function(t){return t instanceof Tensor}),function(){return"The args passed in customGrad(f)(x1, x2,...) must all be "+"tensors"});var res;var inputMap={};inputs.forEach(function(input,i){inputMap[i]=input});var forwardFunc=function(_,save){res=f.apply(void 0,__spread(inputs,[save]));assert(res.value instanceof Tensor,function(){return"The function f passed in customGrad(f) must return an "+"object where `obj.value` is a tensor"});assert(isFunction(res.gradFunc),function(){return"The function f passed in customGrad(f) must return an "+"object where `obj.gradFunc` is a function."});return res.value};var backwardsFunc=function(dy,saved){var gradRes=res.gradFunc(dy,saved);var grads=Array.isArray(gradRes)?gradRes:[gradRes];assert(grads.length===inputs.length,function(){return"The function f passed in customGrad(f) must return an "+"object where `obj.gradFunc` is a function that returns "+"the same number of tensors as inputs passed to f(...)."});assert(grads.every(function(t){return t instanceof Tensor}),function(){return"The function f passed in customGrad(f) must return an "+"object where `obj.gradFunc` is a function that returns "+"a list of only tensors."});var gradMap={};grads.forEach(function(grad,i){gradMap[i]=function(){return grad}});return gradMap};return _this.runKernelFunc({forwardFunc:forwardFunc,backwardsFunc:backwardsFunc,inputs:inputMap})}};Engine.prototype.readSync=function(dataId){var info=this.state.tensorInfo.get(dataId);return info.backend.readSync(dataId)};Engine.prototype.read=function(dataId){var info=this.state.tensorInfo.get(dataId);return info.backend.read(dataId)};Engine.prototype.time=function(query){return __awaiter(this,void 0,void 0,function(){var start,timingInfo;return __generator(this,function(_a){switch(_a.label){case 0:start=now();return[4,this.backend.time(query)];case 1:timingInfo=_a.sent();timingInfo.wallMs=now()-start;return[2,timingInfo]}})})};Engine.prototype.track=function(result){if(this.state.activeScope!=null){result.scopeId=this.state.activeScope.id;this.state.activeScope.track.push(result)}return result};Object.defineProperty(Engine.prototype,"registeredVariables",{get:function(){return this.state.registeredVariables},enumerable:true,configurable:true});Engine.prototype.reset=function(){this.pendingBackendInitId++;this.state.dispose();this.ENV.reset();this.state=new EngineState;for(var backendName in this.registry){this.disposeRegisteredKernels(backendName);this.registry[backendName].dispose();delete this.registry[backendName]}this.backendName=null;this.backendInstance=null;this.pendingBackendInit=null};return Engine}();Engine.nextTensorId=0;Engine.nextVariableId=0;function ones$1(shape){var values=makeOnesTypedArray(sizeFromShape(shape),"float32");return ENGINE.makeTensor(values,shape,"float32")}function getOrMakeEngine(){var ns=getGlobalNamespace();if(ns._tfengine==null){var environment=new Environment(ns);ns._tfengine=new Engine(environment)}setEnvironmentGlobal(ns._tfengine.ENV);setTensorTracker(function(){return ns._tfengine});return ns._tfengine}var ENGINE=getOrMakeEngine();function add$1(a,b){var inputs={a:a,b:b};return ENGINE.runKernel(Add,inputs)}function inferShape(val,dtype){var firstElem=val;if(isTypedArray(val)){return dtype==="string"?[]:[val.length]}if(!Array.isArray(val)){return[]}var shape=[];while(Array.isArray(firstElem)||isTypedArray(firstElem)&&dtype!=="string"){shape.push(firstElem.length);firstElem=firstElem[0]}if(Array.isArray(val)&&env().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")){deepAssertShapeConsistency(val,shape,[])}return shape}function deepAssertShapeConsistency(val,shape,indices){indices=indices||[];if(!Array.isArray(val)&&!isTypedArray(val)){assert(shape.length===0,function(){return"Element arr["+indices.join("][")+"] is a primitive, "+("but should be an array/TypedArray of "+shape[0]+" elements")});return}assert(shape.length>0,function(){return"Element arr["+indices.join("][")+"] should be a primitive, "+("but is an array of "+val.length+" elements")});assert(val.length===shape[0],function(){return"Element arr["+indices.join("][")+"] should have "+shape[0]+" "+("elements, but has "+val.length+" elements")});var subShape=shape.slice(1);for(var i=0;i<val.length;++i){deepAssertShapeConsistency(val[i],subShape,indices.concat(i))}}function assertDtype(expectedDtype,actualDType,argName,functionName){if(expectedDtype==="string_or_numeric"){return}if(expectedDtype==null){throw new Error("Expected dtype cannot be null.")}if(expectedDtype!=="numeric"&&expectedDtype!==actualDType||expectedDtype==="numeric"&&actualDType==="string"){throw new Error("Argument '"+argName+"' passed to '"+functionName+"' must "+("be "+expectedDtype+" tensor, but got "+actualDType+" tensor"))}}function convertToTensor(x,argName,functionName,parseAsDtype){if(parseAsDtype===void 0){parseAsDtype="numeric"}if(x instanceof Tensor){assertDtype(parseAsDtype,x.dtype,argName,functionName);return x}var inferredDtype=inferDtype(x);if(inferredDtype!=="string"&&["bool","int32","float32"].indexOf(parseAsDtype)>=0){inferredDtype=parseAsDtype}assertDtype(parseAsDtype,inferredDtype,argName,functionName);if(x==null||!isTypedArray(x)&&!Array.isArray(x)&&typeof x!=="number"&&typeof x!=="boolean"&&typeof x!=="string"){var type=x==null?"null":x.constructor.name;throw new Error("Argument '"+argName+"' passed to '"+functionName+"' must be a "+("Tensor or TensorLike, but got '"+type+"'"))}var inferredShape=inferShape(x,inferredDtype);if(!isTypedArray(x)&&!Array.isArray(x)){x=[x]}var skipTypedArray=true;var values=inferredDtype!=="string"?toTypedArray(x,inferredDtype):flatten(x,[],skipTypedArray);return ENGINE.makeTensor(values,inferredShape,inferredDtype)}function convertToTensorArray(arg,argName,functionName,parseAsDtype){if(parseAsDtype===void 0){parseAsDtype="numeric"}if(!Array.isArray(arg)){throw new Error("Argument "+argName+" passed to "+functionName+" must be a "+"`Tensor[]` or `TensorLike[]`")}var tensors=arg;return tensors.map(function(t,i){return convertToTensor(t,argName+"["+i+"]",functionName,parseAsDtype)})}var OP_SCOPE_SUFFIX="__op";function op(f){var keys=Object.keys(f);if(keys.length!==1){throw new Error("Please provide an object with a single key "+"(operation name) mapping to a function. Got an object with "+(keys.length+" keys."))}var opName=keys[0];var fn=f[opName];if(opName.endsWith("_")){opName=opName.substring(0,opName.length-1)}opName=opName+OP_SCOPE_SUFFIX;var f2=function(){var args=[];for(var _i=0;_i<arguments.length;_i++){args[_i]=arguments[_i]}ENGINE.startScope(opName);try{var result=fn.apply(void 0,__spread(args));if(isPromise(result)){console.error("Cannot return a Promise inside of tidy.")}ENGINE.endScope(result);return result}catch(ex){ENGINE.endScope(null);throw ex}};Object.defineProperty(f2,"name",{value:opName,configurable:true});return f2}function abs_(x){var $x=convertToTensor(x,"x","abs");if($x.dtype==="complex64"){var inputs={x:$x};return ENGINE.runKernel(ComplexAbs,inputs)}else{var inputs={x:$x};return ENGINE.runKernel(Abs,inputs)}}var abs=op({abs_:abs_});function acos_(x){var $x=convertToTensor(x,"x","acos");var inputs={x:$x};return ENGINE.runKernel(Acos,inputs)}var acos=op({acos_:acos_});function acosh_(x){var $x=convertToTensor(x,"x","acosh");var inputs={x:$x};return ENGINE.runKernel(Acosh,inputs)}var acosh=op({acosh_:acosh_});function add_(a,b){var _a;var $a=convertToTensor(a,"a","add");var $b=convertToTensor(b,"b","add");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];var inputs={a:$a,b:$b};return ENGINE.runKernel(Add,inputs)}var add=op({add_:add_});function addN_(tensors){assert(Array.isArray(tensors),function(){return"The argument passed to tf.addN() must be a list of tensors"});assert(tensors.length>=1,function(){return"Must pass at least one tensor to tf.addN(), but got "+(""+tensors.length)});var $tensors=tensors.map(function(t,i){return convertToTensor(t,"tensors"+i,"addN")});var firstTensor=$tensors[0];$tensors.forEach(function(t){if(t.dtype!==firstTensor.dtype){throw new Error("All tensors passed to tf.addN() must have the same dtype")}});$tensors.forEach(function(t){if(!arraysEqual(t.shape,firstTensor.shape)){throw new Error("All tensors passed to tf.addN() must have the same shape")}});var inputs=$tensors;return ENGINE.runKernel(AddN,inputs)}var addN=op({addN_:addN_});function all_(x,axis,keepDims){if(axis===void 0){axis=null}if(keepDims===void 0){keepDims=false}var $x=convertToTensor(x,"x","all","bool");var inputs={x:$x};var attrs={axis:axis,keepDims:keepDims};return ENGINE.runKernel(All,inputs,attrs)}var all=op({all_:all_});function any_(x,axis,keepDims){if(axis===void 0){axis=null}if(keepDims===void 0){keepDims=false}var $x=convertToTensor(x,"x","any","bool");var inputs={x:$x};var attrs={axis:axis,keepDims:keepDims};return ENGINE.runKernel(Any,inputs,attrs)}var any=op({any_:any_});function argMax_(x,axis){if(axis===void 0){axis=0}var $x=convertToTensor(x,"x","argMax");var inputs={x:$x};var attrs={axis:axis};return ENGINE.runKernel(ArgMax,inputs,attrs)}var argMax=op({argMax_:argMax_});function argMin_(x,axis){if(axis===void 0){axis=0}var $x=convertToTensor(x,"x","argMin");var inputs={x:$x};var attrs={axis:axis};return ENGINE.runKernel(ArgMin,inputs,attrs)}var argMin=op({argMin_:argMin_});function asin_(x){var $x=convertToTensor(x,"x","asin");var inputs={x:$x};return ENGINE.runKernel(Asin,inputs)}var asin=op({asin_:asin_});function asinh_(x){var $x=convertToTensor(x,"x","asinh");var inputs={x:$x};return ENGINE.runKernel(Asinh,inputs)}var asinh=op({asinh_:asinh_});function atan_(x){var $x=convertToTensor(x,"x","atan");var inputs={x:$x};return ENGINE.runKernel(Atan,inputs)}var atan=op({atan_:atan_});function atan2_(a,b){var _a;var $a=convertToTensor(a,"a","atan2");var $b=convertToTensor(b,"b","atan2");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];var inputs={a:$a,b:$b};return ENGINE.runKernel(Atan2,inputs)}var atan2=op({atan2_:atan2_});function atanh_(x){var $x=convertToTensor(x,"x","atanh");var inputs={x:$x};return ENGINE.runKernel(Atanh,inputs)}var atanh=op({atanh_:atanh_});function cast_(x,dtype){var $x=convertToTensor(x,"x","cast");if(!isValidDtype(dtype)){throw new Error("Failed to cast to unknown dtype "+dtype)}if(dtype==="string"&&$x.dtype!=="string"||dtype!=="string"&&$x.dtype==="string"){throw new Error("Only strings can be casted to strings")}var inputs={x:$x};var attrs={dtype:dtype};return ENGINE.runKernel(Cast,inputs,attrs)}var cast=op({cast_:cast_});function computePool2DInfo(inShape,filterSize,strides,dilations,pad,roundingMode,dataFormat){if(dataFormat===void 0){dataFormat="channelsLast"}var _a=__read(parseTupleParam(filterSize),2),filterHeight=_a[0],filterWidth=_a[1];var filterShape;if(dataFormat==="channelsLast"){filterShape=[filterHeight,filterWidth,inShape[3],inShape[3]]}else if(dataFormat==="channelsFirst"){filterShape=[filterHeight,filterWidth,inShape[1],inShape[1]]}else{throw new Error("Unknown dataFormat "+dataFormat)}return computeConv2DInfo(inShape,filterShape,strides,dilations,pad,roundingMode,false,dataFormat)}function computeConv2DInfo(inShape,filterShape,strides,dilations,pad,roundingMode,depthwise,dataFormat){var _a,_b;if(depthwise===void 0){depthwise=false}if(dataFormat===void 0){dataFormat="channelsLast"}var _c=__read([-1,-1,-1,-1],4),batchSize=_c[0],inHeight=_c[1],inWidth=_c[2],inChannels=_c[3];if(dataFormat==="channelsLast"){_a=__read(inShape,4),batchSize=_a[0],inHeight=_a[1],inWidth=_a[2],inChannels=_a[3]}else if(dataFormat==="channelsFirst"){_b=__read(inShape,4),batchSize=_b[0],inChannels=_b[1],inHeight=_b[2],inWidth=_b[3]}else{throw new Error("Unknown dataFormat "+dataFormat)}var _d=__read(filterShape,4),filterHeight=_d[0],filterWidth=_d[1],filterChannels=_d[3];var _e=__read(parseTupleParam(strides),2),strideHeight=_e[0],strideWidth=_e[1];var _f=__read(parseTupleParam(dilations),2),dilationHeight=_f[0],dilationWidth=_f[1];var effectiveFilterHeight=getEffectiveFilterSize(filterHeight,dilationHeight);var effectiveFilterWidth=getEffectiveFilterSize(filterWidth,dilationWidth);var _g=getPadAndOutInfo(pad,inHeight,inWidth,strideHeight,strideWidth,effectiveFilterHeight,effectiveFilterWidth,roundingMode,dataFormat),padInfo=_g.padInfo,outHeight=_g.outHeight,outWidth=_g.outWidth;var outChannels=depthwise?filterChannels*inChannels:filterChannels;var outShape;if(dataFormat==="channelsFirst"){outShape=[batchSize,outChannels,outHeight,outWidth]}else if(dataFormat==="channelsLast"){outShape=[batchSize,outHeight,outWidth,outChannels]}return{batchSize:batchSize,dataFormat:dataFormat,inHeight:inHeight,inWidth:inWidth,inChannels:inChannels,outHeight:outHeight,outWidth:outWidth,outChannels:outChannels,padInfo:padInfo,strideHeight:strideHeight,strideWidth:strideWidth,filterHeight:filterHeight,filterWidth:filterWidth,effectiveFilterHeight:effectiveFilterHeight,effectiveFilterWidth:effectiveFilterWidth,dilationHeight:dilationHeight,dilationWidth:dilationWidth,inShape:inShape,outShape:outShape,filterShape:filterShape}}function computeOutputShape2D(inShape,fieldSize,stride,zeroPad,roundingMode){if(zeroPad==null){zeroPad=computeDefaultPad(inShape,fieldSize,stride)}var inputRows=inShape[0];var inputCols=inShape[1];var outputRows=round$1((inputRows-fieldSize+2*zeroPad)/stride+1,roundingMode);var outputCols=round$1((inputCols-fieldSize+2*zeroPad)/stride+1,roundingMode);return[outputRows,outputCols]}function computeDefaultPad(inputShape,fieldSize,stride,dilation){if(dilation===void 0){dilation=1}var effectiveFieldSize=getEffectiveFilterSize(fieldSize,dilation);return Math.floor((inputShape[0]*(stride-1)-stride+effectiveFieldSize)/2)}function parseTupleParam(param){if(typeof param==="number"){return[param,param,param]}if(param.length===2){return[param[0],param[1],1]}return param}function getEffectiveFilterSize(filterSize,dilation){if(dilation<=1){return filterSize}return filterSize+(filterSize-1)*(dilation-1)}function getPadAndOutInfo(pad,inHeight,inWidth,strideHeight,strideWidth,filterHeight,filterWidth,roundingMode,dataFormat){var padInfo;var outHeight;var outWidth;if(typeof pad==="number"){var padType=pad===0?"VALID":"NUMBER";padInfo={top:pad,bottom:pad,left:pad,right:pad,type:padType};var outShape=computeOutputShape2D([inHeight,inWidth],filterHeight,strideHeight,pad,roundingMode);outHeight=outShape[0];outWidth=outShape[1]}else if(pad==="same"){outHeight=Math.ceil(inHeight/strideHeight);outWidth=Math.ceil(inWidth/strideWidth);var padAlongHeight=Math.max(0,(outHeight-1)*strideHeight+filterHeight-inHeight);var padAlongWidth=Math.max(0,(outWidth-1)*strideWidth+filterWidth-inWidth);var top=Math.floor(padAlongHeight/2);var bottom=padAlongHeight-top;var left=Math.floor(padAlongWidth/2);var right=padAlongWidth-left;padInfo={top:top,bottom:bottom,left:left,right:right,type:"SAME"}}else if(pad==="valid"){padInfo={top:0,bottom:0,left:0,right:0,type:"VALID"};outHeight=Math.ceil((inHeight-filterHeight+1)/strideHeight);outWidth=Math.ceil((inWidth-filterWidth+1)/strideWidth)}else if(typeof pad==="object"){var top=dataFormat==="channelsLast"?pad[1][0]:pad[2][0];var bottom=dataFormat==="channelsLast"?pad[1][1]:pad[2][1];var left=dataFormat==="channelsLast"?pad[2][0]:pad[3][0];var right=dataFormat==="channelsLast"?pad[2][1]:pad[3][1];var padType=top===0&&bottom===0&&left===0&&right===0?"VALID":"EXPLICIT";padInfo={top:top,bottom:bottom,left:left,right:right,type:padType};outHeight=round$1((inHeight-filterHeight+top+bottom)/strideHeight+1,roundingMode);outWidth=round$1((inWidth-filterWidth+left+right)/strideWidth+1,roundingMode)}else{throw Error("Unknown padding parameter: "+pad)}return{padInfo:padInfo,outHeight:outHeight,outWidth:outWidth}}function round$1(value,roundingMode){if(!roundingMode){return Math.trunc(value)}switch(roundingMode){case"round":return Math.round(value);case"ceil":return Math.ceil(value);case"floor":return Math.floor(value);default:throw new Error("Unknown roundingMode "+roundingMode)}}function tupleValuesAreOne(param){var _a=__read(parseTupleParam(param),3),dimA=_a[0],dimB=_a[1],dimC=_a[2];return dimA===1&&dimB===1&&dimC===1}function eitherStridesOrDilationsAreOne(strides,dilations){return tupleValuesAreOne(strides)||tupleValuesAreOne(dilations)}function reshape_(x,shape){var $x=convertToTensor(x,"x","reshape","string_or_numeric");var inputs={x:$x};var attrs={shape:shape};return ENGINE.runKernel(Reshape,inputs,attrs)}var reshape=op({reshape_:reshape_});function avgPool_(x,filterSize,strides,pad,dimRoundingMode){var $x=convertToTensor(x,"x","avgPool","float32");var dilations=1;assert(eitherStridesOrDilationsAreOne(strides,dilations),function(){return"Error in avgPool: Either strides or dilations must be 1. "+("Got strides "+strides+" and dilations '"+dilations+"'")});var x4D=$x;var reshapedTo4D=false;if($x.rank===3){reshapedTo4D=true;x4D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2]])}assert(x4D.rank===4,function(){return"Error in avgPool: x must be rank 4 but got rank "+x4D.rank+"."});if(dimRoundingMode!=null){assert(isInt(pad),function(){return"Error in avgPool: pad must be an integer when using, "+("dimRoundingMode "+dimRoundingMode+" but got pad "+pad+".")})}var inputs={x:x4D};var attrs={filterSize:filterSize,strides:strides,pad:pad,dimRoundingMode:dimRoundingMode};var res=ENGINE.runKernel(AvgPool,inputs,attrs);res=cast(res,$x.dtype);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return res}var avgPool=op({avgPool_:avgPool_});function avgPool3d_(x,filterSize,strides,pad,dimRoundingMode,dataFormat){if(dataFormat===void 0){dataFormat="NDHWC"}var $x=convertToTensor(x,"x","avgPool3d","float32");var x5D=$x;var reshapedTo5D=false;if($x.rank===4){reshapedTo5D=true;x5D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2],$x.shape[3]])}assert(x5D.rank===5,function(){return"Error in avgPool3d: x must be rank 5 but got rank "+x5D.rank+"."});assert(dataFormat==="NDHWC",function(){return"Error in avgPool3d: Only NDHWC is currently supported, "+("but got dataFormat of "+dataFormat)});if(dimRoundingMode!=null){assert(isInt(pad),function(){return"Error in avgPool3d: pad must be an integer when using, "+("dimRoundingMode "+dimRoundingMode+" but got pad "+pad+".")})}var inputs={x:x5D};var attrs={filterSize:filterSize,strides:strides,pad:pad,dimRoundingMode:dimRoundingMode,dataFormat:dataFormat};var res=ENGINE.runKernel(AvgPool3D,inputs,attrs);res=cast(res,x5D.dtype);if(reshapedTo5D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3],res.shape[4]])}return res}var avgPool3d=op({avgPool3d_:avgPool3d_});function clone_(x){var $x=convertToTensor(x,"x","clone","string_or_numeric");var inputs={x:$x};return ENGINE.runKernel(Identity,inputs)}var clone=op({clone_:clone_});function concat_(tensors,axis){if(axis===void 0){axis=0}assert(tensors.length>=1,function(){return"Pass at least one tensor to concat"});var $tensors=convertToTensorArray(tensors,"tensors","concat","string_or_numeric");if($tensors[0].dtype==="complex64"){$tensors.forEach(function(tensor){if(tensor.dtype!=="complex64"){throw new Error("Cannot concatenate complex64 tensors with a tensor\n          with dtype "+tensor.dtype+". ")}})}if($tensors.length===1){return clone($tensors[0])}var inputs=$tensors;var attr={axis:axis};return ENGINE.runKernel(Concat,inputs,attr)}var concat=op({concat_:concat_});function matMul_(a,b,transposeA,transposeB){var _a;if(transposeA===void 0){transposeA=false}if(transposeB===void 0){transposeB=false}var $a=convertToTensor(a,"a","matMul");var $b=convertToTensor(b,"b","matMul");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];var inputs={a:$a,b:$b};var attrs={transposeA:transposeA,transposeB:transposeB};return ENGINE.runKernel(BatchMatMul,inputs,attrs)}var matMul$1=op({matMul_:matMul_});function mul_(a,b){var _a;var $a=convertToTensor(a,"a","mul");var $b=convertToTensor(b,"b","mul");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];var inputs={a:$a,b:$b};return ENGINE.runKernel(Multiply,inputs)}var mul=op({mul_:mul_});function sigmoid_(x){var $x=convertToTensor(x,"x","sigmoid","float32");var inputs={x:$x};return ENGINE.runKernel(Sigmoid,inputs)}var sigmoid=op({sigmoid_:sigmoid_});function slice_(x,begin,size){var $x=convertToTensor(x,"x","slice","string_or_numeric");if($x.rank===0){throw new Error("Slicing scalar is not possible")}var inputs={x:$x};var attrs={begin:begin,size:size};return ENGINE.runKernel(Slice,inputs,attrs)}var slice=op({slice_:slice_});function tanh_(x){var $x=convertToTensor(x,"x","tanh","float32");var inputs={x:$x};return ENGINE.runKernel(Tanh,inputs)}var tanh=op({tanh_:tanh_});function basicLSTMCell_(forgetBias,lstmKernel,lstmBias,data,c,h){var $forgetBias=convertToTensor(forgetBias,"forgetBias","basicLSTMCell");var $lstmKernel=convertToTensor(lstmKernel,"lstmKernel","basicLSTMCell");var $lstmBias=convertToTensor(lstmBias,"lstmBias","basicLSTMCell");var $data=convertToTensor(data,"data","basicLSTMCell");var $c=convertToTensor(c,"c","basicLSTMCell");var $h=convertToTensor(h,"h","basicLSTMCell");var combined=concat([$data,$h],1);var weighted=matMul$1(combined,$lstmKernel);var res=add(weighted,$lstmBias);var batchSize=res.shape[0];var sliceCols=res.shape[1]/4;var sliceSize=[batchSize,sliceCols];var i=slice(res,[0,0],sliceSize);var j=slice(res,[0,sliceCols],sliceSize);var f=slice(res,[0,sliceCols*2],sliceSize);var o=slice(res,[0,sliceCols*3],sliceSize);var newC=add(mul(sigmoid(i),tanh(j)),mul($c,sigmoid(add($forgetBias,f))));var newH=mul(tanh(newC),sigmoid(o));return[newC,newH]}var basicLSTMCell=op({basicLSTMCell_:basicLSTMCell_});function batchToSpaceND_(x,blockShape,crops){var $x=convertToTensor(x,"x","batchToSpaceND");var prod=blockShape.reduce(function(a,b){return a*b});assert($x.rank>=1+blockShape.length,function(){return"input rank is "+$x.rank+" but should be > than blockShape.length "+blockShape.length});assert(crops.length===blockShape.length,function(){return"crops.length is "+crops.length+" but should be equal to blockShape.length  "+blockShape.length});assert($x.shape[0]%prod===0,function(){return"input tensor batch is "+$x.shape[0]+" but is not divisible by the product of "+("the elements of blockShape "+blockShape.join(" * ")+" === "+prod)});var inputs={x:$x};var attrs={blockShape:blockShape,crops:crops};return ENGINE.runKernel(BatchToSpaceND,inputs,attrs)}var batchToSpaceND=op({batchToSpaceND_:batchToSpaceND_});function xAs4D(x){var x4D;if(x.rank===0||x.rank===1){x4D=reshape(x,[1,1,1,x.size])}else if(x.rank===2){x4D=reshape(x,[1,1,x.shape[0],x.shape[1]])}else if(x.rank===3){x4D=reshape(x,[1,x.shape[0],x.shape[1],x.shape[2]])}else{x4D=x}return x4D}function batchNorm_(x,mean,variance,offset,scale,varianceEpsilon){if(varianceEpsilon==null){varianceEpsilon=.001}var $x=convertToTensor(x,"x","batchNorm");var $mean=convertToTensor(mean,"mean","batchNorm");var $variance=convertToTensor(variance,"variance","batchNorm");var $scale;if(scale!=null){$scale=convertToTensor(scale,"scale","batchNorm")}var $offset;if(offset!=null){$offset=convertToTensor(offset,"offset","batchNorm")}assert($mean.rank===$variance.rank,function(){return"Batch normalization gradient requires mean and variance to have "+"equal ranks."});assert($offset==null||$mean.rank===$offset.rank,function(){return"Batch normalization gradient requires mean and offset to have "+"equal ranks."});assert($scale==null||$mean.rank===$scale.rank,function(){return"Batch normalization gradient requires mean and scale to have "+"equal ranks."});var x4D=xAs4D($x);var inputs={x:x4D,scale:$scale,offset:$offset,mean:$mean,variance:$variance};var attrs={varianceEpsilon:varianceEpsilon};var res=ENGINE.runKernel(FusedBatchNorm,inputs,attrs);return reshape(res,$x.shape)}var batchNorm=op({batchNorm_:batchNorm_});function batchNorm2d_(x,mean,variance,offset,scale,varianceEpsilon){var $x=convertToTensor(x,"x","batchNorm");var $mean=convertToTensor(mean,"mean","batchNorm");var $variance=convertToTensor(variance,"variance","batchNorm");var $scale;if(scale!=null){$scale=convertToTensor(scale,"scale","batchNorm")}var $offset;if(offset!=null){$offset=convertToTensor(offset,"offset","batchNorm")}assert($x.rank===2,function(){return"Error in batchNorm2D: x must be rank 2 but got rank "+($x.rank+".")});assert($mean.rank===2||$mean.rank===1,function(){return"Error in batchNorm2D: mean must be rank 2 or rank 1 but "+("got rank "+$mean.rank+".")});assert($variance.rank===2||$variance.rank===1,function(){return"Error in batchNorm2D: variance must be rank 2 or rank 1 "+("but got rank "+$variance.rank+".")});if($scale!=null){assert($scale.rank===2||$scale.rank===1,function(){return"Error in batchNorm2D: scale must be rank 2 or rank 1 "+("but got rank "+$scale.rank+".")})}if($offset!=null){assert($offset.rank===2||$offset.rank===1,function(){return"Error in batchNorm2D: offset must be rank 2 or rank 1 "+("but got rank "+$offset.rank+".")})}return batchNorm($x,$mean,$variance,$offset,$scale,varianceEpsilon)}var batchNorm2d=op({batchNorm2d_:batchNorm2d_});function batchNorm3d_(x,mean,variance,offset,scale,varianceEpsilon){var $x=convertToTensor(x,"x","batchNorm");var $mean=convertToTensor(mean,"mean","batchNorm");var $variance=convertToTensor(variance,"variance","batchNorm");var $scale;if(scale!=null){$scale=convertToTensor(scale,"scale","batchNorm")}var $offset;if(offset!=null){$offset=convertToTensor(offset,"offset","batchNorm")}assert($x.rank===3,function(){return"Error in batchNorm3D: x must be rank 3 but got rank "+($x.rank+".")});assert($mean.rank===3||$mean.rank===1,function(){return"Error in batchNorm3D: mean must be rank 3 or rank 1 but "+("got rank "+$mean.rank+".")});assert($variance.rank===3||$variance.rank===1,function(){return"Error in batchNorm3D: variance must be rank 3 or rank 1 "+("but got rank "+$variance.rank+".")});if($scale!=null){assert($scale.rank===3||$scale.rank===1,function(){return"Error in batchNorm3D: scale must be rank 3 or rank 1 "+("but got rank "+$scale.rank+".")})}if($offset!=null){assert($offset.rank===3||$offset.rank===1,function(){return"Error in batchNorm3D: offset must be rank 3 or rank 1 "+("but got rank "+$offset.rank+".")})}return batchNorm($x,$mean,$variance,$offset,$scale,varianceEpsilon)}var batchNorm3d=op({batchNorm3d_:batchNorm3d_});function batchNorm4d_(x,mean,variance,offset,scale,varianceEpsilon){var $x=convertToTensor(x,"x","batchNorm");var $mean=convertToTensor(mean,"mean","batchNorm");var $variance=convertToTensor(variance,"variance","batchNorm");var $scale;if(scale!=null){$scale=convertToTensor(scale,"scale","batchNorm")}var $offset;if(offset!=null){$offset=convertToTensor(offset,"offset","batchNorm")}assert($x.rank===4,function(){return"Error in batchNorm4D: x must be rank 4 but got rank "+($x.rank+".")});assert($mean.rank===4||$mean.rank===1,function(){return"Error in batchNorm4D: mean must be rank 4 or rank 1 but "+("got rank "+$mean.rank+".")});assert($variance.rank===4||$variance.rank===1,function(){return"Error in batchNorm4D: variance must be rank 4 or rank 1 "+("but got rank "+$variance.rank+".")});if($scale!=null){assert($scale.rank===4||$scale.rank===1,function(){return"Error in batchNorm4D: scale must be rank 4 or rank 1 "+("but got rank "+$scale.rank+".")})}if($offset!=null){assert($offset.rank===4||$offset.rank===1,function(){return"Error in batchNorm4D: offset must be rank 4 or rank 1 "+("but got rank "+$offset.rank+".")})}return batchNorm($x,$mean,$variance,$offset,$scale,varianceEpsilon)}var batchNorm4d=op({batchNorm4d_:batchNorm4d_});function bincount_(x,weights,size){var $x=convertToTensor(x,"x","bincount");var $weights=convertToTensor(weights,"weights","bincount");assert($x.dtype==="int32",function(){return"Error in bincount: input "+("dtype must be int32, but got "+$x.dtype)});assert(size>=0,function(){return"size must be non-negative, but got "+size+"."});assert($weights.size===$x.size||$weights.size===0,function(){return"Error in bincount: weights must have the same size as input or"+("0-length, but got input shape: "+$x.shape+", weights shape: ")+($weights.shape+".")});var inputs={x:$x,weights:$weights};var attrs={size:size};return ENGINE.runKernel(Bincount,inputs,attrs)}var bincount=op({bincount_:bincount_});function broadcastArgs_(s0,s1){var shape1Input=convertToTensor(s0,"s0","broadcastArgs","int32");var shape2Input=convertToTensor(s1,"s1","broadcastArgs","int32");if(shape1Input.rank!==1){throw new Error("broadcastArgs(): first input must be a vector (rank=1). "+("Has rank "+shape1Input.rank))}if(shape2Input.rank!==1){throw new Error("broadcastArgs(): second input must be a vector (rank=1). "+("Has rank "+shape2Input.rank))}var inputs={s0:shape1Input,s1:shape2Input};return ENGINE.runKernel(BroadcastArgs,inputs)}var broadcastArgs=op({broadcastArgs_:broadcastArgs_});function broadcastTo_(x,shape){var input=convertToTensor(x,"broadcastTo","x");var xShape=input.shape;if(shape.some(function(d){return!(d>0)||d%1!==0})){throw new Error("broadcastTo(): Invalid broadcast shape ["+shape+"].")}if(shape.length<input.rank){throw new Error("broadcastTo(): shape.length="+shape.length+" < input.rank="+input.rank+".")}if(shape.length>input.rank){var newShape=input.shape.slice();while(newShape.length<shape.length){newShape.unshift(1)}input=reshape(input,newShape)}var inputShape=input.shape;var reps=Array.from(shape);for(var i=shape.length-1;i>=0;i--){if(inputShape[i]===shape[i]){reps[i]=1}else if(input.shape[i]!==1){throw new Error("broadcastTo(): ["+xShape+"] cannot be broadcast to ["+shape+"].")}}var axes=reps.map(function(n,i){return n>1?i:-1}).filter(function(i){return i>=0});if(axes.length===0){return clone(input)}var inputs={x:input};var attrs={reps:reps};return ENGINE.runKernel(Tile,inputs,attrs)}var broadcastTo=op({broadcastTo_:broadcastTo_});function buffer(shape,dtype,values){if(dtype===void 0){dtype="float32"}dtype=dtype||"float32";assertNonNegativeIntegerDimensions(shape);return new TensorBuffer(shape,dtype,values)}function ceil_(x){var $x=convertToTensor(x,"x","ceil","float32");var inputs={x:$x};return ENGINE.runKernel(Ceil,inputs)}var ceil=op({ceil_:ceil_});function clipByValue_(x,clipValueMin,clipValueMax){var $x=convertToTensor(x,"x","clipByValue");assert(clipValueMin<=clipValueMax,function(){return"Error in clip: min ("+clipValueMin+") must be "+("less than or equal to max ("+clipValueMax+").")});var inputs={x:$x};var attrs={clipValueMin:clipValueMin,clipValueMax:clipValueMax};return ENGINE.runKernel(ClipByValue,inputs,attrs)}var clipByValue=op({clipByValue_:clipByValue_});function complex_(real,imag){var $real=convertToTensor(real,"real","complex");var $imag=convertToTensor(imag,"imag","complex");assertShapesMatch($real.shape,$imag.shape,"real and imag shapes, "+$real.shape+" and "+$imag.shape+", "+"must match in call to tf.complex().");var inputs={real:$real,imag:$imag};return ENGINE.runKernel(Complex,inputs)}var complex=op({complex_:complex_});function concat1d_(tensors){return concat(tensors,0)}var concat1d=op({concat1d_:concat1d_});function concat2d_(tensors,axis){return concat(tensors,axis)}var concat2d=op({concat2d_:concat2d_});function concat3d_(tensors,axis){return concat(tensors,axis)}var concat3d=op({concat3d_:concat3d_});function concat4d_(tensors,axis){return concat(tensors,axis)}var concat4d=op({concat4d_:concat4d_});function conv2d_(x,filter,strides,pad,dataFormat,dilations,dimRoundingMode){if(dataFormat===void 0){dataFormat="NHWC"}if(dilations===void 0){dilations=[1,1]}var $x=convertToTensor(x,"x","conv2d","float32");var $filter=convertToTensor(filter,"filter","conv2d","float32");var x4D=$x;var reshapedTo4D=false;if($x.rank===3){reshapedTo4D=true;x4D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2]])}assert(x4D.rank===4,function(){return"Error in conv2d: input must be rank 4, but got rank "+x4D.rank+"."});assert($filter.rank===4,function(){return"Error in conv2d: filter must be rank 4, but got rank "+($filter.rank+".")});if(dimRoundingMode!=null){assert(isInt(pad),function(){return"Error in conv2d: pad must be an integer when using, "+("dimRoundingMode "+dimRoundingMode+" but got pad "+pad+".")})}var inDepth=dataFormat==="NHWC"?x4D.shape[3]:x4D.shape[1];assert(inDepth===$filter.shape[2],function(){return"Error in conv2d: depth of input ("+inDepth+") must match "+("input depth for filter "+$filter.shape[2]+".")});assert(eitherStridesOrDilationsAreOne(strides,dilations),function(){return"Error in conv2D: Either strides or dilations must be 1. "+("Got strides "+strides+" and dilations '"+dilations+"'")});var inputs={x:x4D,filter:$filter};var attrs={strides:strides,pad:pad,dataFormat:dataFormat,dilations:dilations,dimRoundingMode:dimRoundingMode};var res=ENGINE.runKernel(Conv2D,inputs,attrs);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return res}var conv2d$1=op({conv2d_:conv2d_});function conv1d_(x,filter,stride,pad,dataFormat,dilation,dimRoundingMode){if(dataFormat===void 0){dataFormat="NWC"}if(dilation===void 0){dilation=1}var $x=convertToTensor(x,"x","conv1d");var $filter=convertToTensor(filter,"filter","conv1d");var x3D=$x;var reshapedTo3D=false;if($x.rank===2){reshapedTo3D=true;x3D=reshape($x,[1,$x.shape[0],$x.shape[1]])}assert(x3D.rank===3,function(){return"Error in conv1d: input must be rank 3, but got rank "+x3D.rank+"."});assert($filter.rank===3,function(){return"Error in conv1d: filter must be rank 3, but got rank "+($filter.rank+".")});if(dimRoundingMode!=null){assert(isInt(pad),function(){return"Error in conv1d: pad must be an integer when using, "+("dimRoundingMode "+dimRoundingMode+" but got pad "+pad+".")})}assert(x3D.shape[2]===$filter.shape[1],function(){return"Error in conv1d: depth of input ("+x3D.shape[2]+") must match "+("input depth for filter "+$filter.shape[1]+".")});assert(eitherStridesOrDilationsAreOne(stride,dilation),function(){return"Error in conv1D: Either stride or dilation must be 1. "+("Got stride "+stride+" and dilation '"+dilation+"'")});assert(dataFormat==="NWC",function(){return"Error in conv1d: got dataFormat of "+dataFormat+" but only NWC is currently supported."});var filter4D=reshape($filter,[1,$filter.shape[0],$filter.shape[1],$filter.shape[2]]);var input4D=reshape(x3D,[x3D.shape[0],1,x3D.shape[1],x3D.shape[2]]);var strides=[1,stride];var dilations=[1,dilation];var conv2dDataFormat="NHWC";var res=conv2d$1(input4D,filter4D,strides,pad,conv2dDataFormat,dilations,dimRoundingMode);if(reshapedTo3D){return reshape(res,[res.shape[2],res.shape[3]])}return reshape(res,[res.shape[0],res.shape[2],res.shape[3]])}var conv1d=op({conv1d_:conv1d_});function conv2DBackpropInput_(xShape,dy,filter,strides,pad,dataFormat,dimRoundingMode){if(dataFormat===void 0){dataFormat="NHWC"}assert(xShape.length===dy.rank,function(){return"Length of inShape "+("("+xShape.length+") and rank of dy ("+dy.rank+") must match")});var xShape4D=xShape;var dy4D=dy;var reshapedTo4D=false;if(dy.rank===3){reshapedTo4D=true;dy4D=reshape(dy,[1,dy.shape[0],dy.shape[1],dy.shape[2]]);xShape4D=[1,xShape[0],xShape[1],xShape[2]]}assert(xShape4D.length===4,function(){return"Error in conv2dDerInput: inShape must be length 4, but got length "+(xShape4D.length+".")});assert(dy4D.rank===4,function(){return"Error in conv2dDerInput: dy must be rank 4, but got "+("rank "+dy4D.rank)});assert(filter.rank===4,function(){return"Error in conv2dDerInput: filter must be rank 4, but got "+("rank "+filter.rank)});var inDepth=dataFormat==="NHWC"?xShape4D[3]:xShape4D[1];var outDepth=dataFormat==="NHWC"?dy4D.shape[3]:dy4D.shape[1];assert(inDepth===filter.shape[2],function(){return"Error in conv2dDerInput: depth of input ("+inDepth+") must "+("match input depth for filter "+filter.shape[2]+".")});assert(outDepth===filter.shape[3],function(){return"Error in conv2dDerInput: depth of output ("+outDepth+") must "+("match output depth for filter "+filter.shape[3]+".")});if(dimRoundingMode!=null){assert(isInt(pad),function(){return"Error in conv2dDerInput: pad must be an integer when using, "+("dimRoundingMode "+dimRoundingMode+" but got pad "+pad+".")})}var inputs={dy:dy4D,filter:filter};var attrs={strides:strides,pad:pad,dataFormat:dataFormat,dimRoundingMode:dimRoundingMode,inputShape:xShape4D};var res=ENGINE.runKernel(Conv2DBackpropInput,inputs,attrs);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return res}var conv2DBackpropInput=op({conv2DBackpropInput_:conv2DBackpropInput_});function conv2dTranspose_(x,filter,outputShape,strides,pad,dimRoundingMode){var $x=convertToTensor(x,"x","conv2dTranspose");var $filter=convertToTensor(filter,"filter","conv2dTranspose");return conv2DBackpropInput(outputShape,$x,$filter,strides,pad,"NHWC",dimRoundingMode)}var conv2dTranspose=op({conv2dTranspose_:conv2dTranspose_});function conv3d_(x,filter,strides,pad,dataFormat,dilations){if(dataFormat===void 0){dataFormat="NDHWC"}if(dilations===void 0){dilations=[1,1,1]}var $x=convertToTensor(x,"x","conv3d");var $filter=convertToTensor(filter,"filter","conv3d");var x5D=$x;var reshapedTo5D=false;if($x.rank===4){reshapedTo5D=true;x5D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2],$x.shape[3]])}assert(x5D.rank===5,function(){return"Error in conv3d: input must be rank 5, but got rank "+x5D.rank+"."});assert($filter.rank===5,function(){return"Error in conv3d: filter must be rank 5, but got rank "+($filter.rank+".")});assert(x5D.shape[4]===$filter.shape[3],function(){return"Error in conv3d: depth of input ("+x5D.shape[4]+") must match "+("input depth for filter "+$filter.shape[3]+".")});assert(eitherStridesOrDilationsAreOne(strides,dilations),function(){return"Error in conv3D: Either strides or dilations must be 1. "+("Got strides "+strides+" and dilations '"+dilations+"'")});assert(dataFormat==="NDHWC",function(){return"Error in conv3d: got dataFormat of "+dataFormat+" but only NDHWC is currently supported."});var inputs={x:x5D,filter:$filter};var attrs={strides:strides,pad:pad,dataFormat:dataFormat,dilations:dilations};var res=ENGINE.runKernel(Conv3D,inputs,attrs);if(reshapedTo5D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3],res.shape[4]])}return res}var conv3d=op({conv3d_:conv3d_});function conv3DBackpropInput_(xShape,dy,filter,strides,pad){assert(xShape.length===dy.rank,function(){return"Length of inShape "+("("+xShape.length+") and rank of dy ("+dy.rank+") must match")});var xShape5D=xShape;var dy5D=dy;var reshapedTo5D=false;if(dy.rank===4){reshapedTo5D=true;dy5D=reshape(dy,[1,dy.shape[0],dy.shape[1],dy.shape[2],dy.shape[3]]);xShape5D=[1,xShape[0],xShape[1],xShape[2],xShape[3]]}var inDepth=xShape5D[4];var outDepth=dy5D.shape[4];assert(xShape5D.length===5,function(){return"Error in conv3dDerInput: inShape must be length 5, but got length "+(xShape5D.length+".")});assert(dy5D.rank===5,function(){return"Error in conv3dDerInput: dy must be rank 5, but got "+("rank "+dy5D.rank)});assert(filter.rank===5,function(){return"Error in conv3dDerInput: filter must be rank 5, but got "+("rank "+filter.rank)});assert(inDepth===filter.shape[3],function(){return"Error in conv3dDerInput: depth of input ("+inDepth+") must "+("match input depth for filter "+filter.shape[3]+".")});assert(outDepth===filter.shape[4],function(){return"Error in conv3dDerInput: depth of output ("+outDepth+") must "+("match output depth for filter "+filter.shape[4]+".")});var inputs={dy:dy5D,filter:filter};var attrs={pad:pad,strides:strides,inputShape:xShape5D};var res=ENGINE.runKernel(Conv3DBackpropInputV2,inputs,attrs);if(reshapedTo5D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3],res.shape[4]])}return res}var conv3DBackpropInput=op({conv3DBackpropInput_:conv3DBackpropInput_});function conv3dTranspose_(x,filter,outputShape,strides,pad){var $x=convertToTensor(x,"x","conv3dTranspose");var $filter=convertToTensor(filter,"filter","conv3dTranspose");return conv3DBackpropInput(outputShape,$x,$filter,strides,pad)}var conv3dTranspose=op({conv3dTranspose_:conv3dTranspose_});function cos_(x){var $x=convertToTensor(x,"x","cos","float32");var inputs={x:$x};return ENGINE.runKernel(Cos,inputs)}var cos=op({cos_:cos_});function cosh_(x){var $x=convertToTensor(x,"x","cosh","float32");var inputs={x:$x};return ENGINE.runKernel(Cosh,inputs)}var cosh=op({cosh_:cosh_});function cumsum_(x,axis,exclusive,reverse){if(axis===void 0){axis=0}if(exclusive===void 0){exclusive=false}if(reverse===void 0){reverse=false}var $x=convertToTensor(x,"x","cumsum");var inputs={x:$x};var attrs={axis:axis,exclusive:exclusive,reverse:reverse};return ENGINE.runKernel(Cumsum,inputs,attrs)}var cumsum=op({cumsum_:cumsum_});function denseBincount_(x,weights,size,binaryOutput){if(binaryOutput===void 0){binaryOutput=false}var $x=convertToTensor(x,"x","denseBincount");var $weights=convertToTensor(weights,"weights","denseBincount");assert($x.dtype==="int32",function(){return"Error in denseBincount: input "+("dtype must be int32, but got "+$x.dtype)});assert($x.rank<=2,function(){return"Error in denseBincount: input must be at most rank 2, but got "+("rank "+$x.rank+".")});assert(size>=0,function(){return"size must be non-negative, but got "+size+"."});assert($weights.size===$x.size||$weights.size===0,function(){return"Error in denseBincount: weights must have the same shape as x or "+("0-length, but got x shape: "+$x.shape+", weights shape: ")+($weights.shape+".")});var inputs={x:$x,weights:$weights};var attrs={size:size,binaryOutput:binaryOutput};return ENGINE.runKernel(DenseBincount,inputs,attrs)}var denseBincount=op({denseBincount_:denseBincount_});function depthToSpace_(x,blockSize,dataFormat){if(dataFormat===void 0){dataFormat="NHWC"}var $x=convertToTensor(x,"x","depthToSpace","float32");var inputHeight=dataFormat==="NHWC"?$x.shape[1]:$x.shape[2];var inputWidth=dataFormat==="NHWC"?$x.shape[2]:$x.shape[3];var inputDepth=dataFormat==="NHWC"?$x.shape[3]:$x.shape[1];assert(blockSize>1,function(){return"blockSize should be > 1 for depthToSpace, but was: "+blockSize});assert(inputHeight*blockSize>=0,function(){return"Negative dimension size caused by overflow when multiplying\n    "+inputHeight+" and "+blockSize+"  for depthToSpace with input shape\n    "+$x.shape});assert(inputWidth*blockSize>=0,function(){return"Negative dimension size caused by overflow when multiplying\n    "+inputWidth+" and "+blockSize+" for depthToSpace with input shape\n        "+$x.shape});assert(inputDepth%(blockSize*blockSize)===0,function(){return"Dimension size must be evenly divisible by "+blockSize*blockSize+" but is "+inputDepth+" for depthToSpace with input shape "+$x.shape});var inputs={x:$x};var attrs={blockSize:blockSize,dataFormat:dataFormat};return ENGINE.runKernel(DepthToSpace,inputs,attrs)}var depthToSpace=op({depthToSpace_:depthToSpace_});function depthwiseConv2d_(x,filter,strides,pad,dataFormat,dilations,dimRoundingMode){if(dataFormat===void 0){dataFormat="NHWC"}if(dilations===void 0){dilations=[1,1]}var $x=convertToTensor(x,"x","depthwiseConv2d","float32");var $filter=convertToTensor(filter,"filter","depthwiseConv2d","float32");var x4D=$x;var reshapedTo4D=false;if($x.rank===3){reshapedTo4D=true;x4D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2]])}assert(x4D.rank===4,function(){return"Error in depthwiseConv2d: input must be rank 4, but got "+("rank "+x4D.rank+".")});assert($filter.rank===4,function(){return"Error in depthwiseConv2d: filter must be rank 4, but got rank "+($filter.rank+".")});assert(x4D.shape[3]===$filter.shape[2],function(){return"Error in depthwiseConv2d: number of input channels "+("("+x4D.shape[3]+") must match the inChannels dimension in ")+("filter "+$filter.shape[2]+".")});if(dimRoundingMode!=null){assert(isInt(pad),function(){return"Error in depthwiseConv2d: pad must be an integer when using, "+("dimRoundingMode "+dimRoundingMode+" but got pad "+pad+".")})}var inputs={x:x4D,filter:$filter};var attrs={strides:strides,pad:pad,dataFormat:dataFormat,dilations:dilations,dimRoundingMode:dimRoundingMode};var res=ENGINE.runKernel(DepthwiseConv2dNative,inputs,attrs);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return res}var depthwiseConv2d$1=op({depthwiseConv2d_:depthwiseConv2d_});function diag_(x){var $x=convertToTensor(x,"x","diag");var inputs={x:$x};return ENGINE.runKernel(Diag,inputs)}var diag=op({diag_:diag_});function dilation2d_(x,filter,strides,pad,dilations,dataFormat){if(dilations===void 0){dilations=[1,1]}if(dataFormat===void 0){dataFormat="NHWC"}var $x=convertToTensor(x,"x","dilation2d");var $filter=convertToTensor(filter,"filter","dilation2d");assert($x.rank===3||$x.rank===4,function(){return"Error in dilation2d: input must be rank 3 or 4, but got rank "+($x.rank+".")});assert($filter.rank===3,function(){return"Error in dilation2d: filter must be rank 3, but got rank "+($filter.rank+".")});assert(dataFormat==="NHWC",function(){return"Error in dilation2d: Only NHWC is currently supported, "+("but got dataFormat of "+dataFormat)});var x4D=$x;var reshapedTo4D=false;if($x.rank===3){x4D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2]]);reshapedTo4D=true}var inputs={x:x4D,filter:$filter};var attrs={strides:strides,pad:pad,dilations:dilations};var res=ENGINE.runKernel(Dilation2D,inputs,attrs);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return res}var dilation2d=op({dilation2d_:dilation2d_});function floorDiv_(a,b){var _a;var $a=convertToTensor(a,"a","floorDiv");var $b=convertToTensor(b,"b","floorDiv");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];var inputs={a:$a,b:$b};return ENGINE.runKernel(FloorDiv,inputs)}var floorDiv=op({floorDiv_:floorDiv_});function div_(a,b){var _a;var $a=convertToTensor(a,"a","div");var $b=convertToTensor(b,"b","div");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];if($a.dtype==="int32"&&$b.dtype==="int32"){return floorDiv($a,$b)}var inputs={a:$a,b:$b};var attrs={};return ENGINE.runKernel(RealDiv,inputs,attrs)}var div=op({div_:div_});function getReductionAxes(inShape,outShape){var result=[];for(var i=0;i<outShape.length;i++){var inDim=inShape[inShape.length-i-1];var outAxis=outShape.length-i-1;var outDim=outShape[outAxis];if(inDim==null||inDim===1&&outDim>1){result.unshift(outAxis)}}return result}function assertAndGetBroadcastShape(shapeA,shapeB){var result=[];var l=Math.max(shapeA.length,shapeB.length);for(var i=0;i<l;i++){var a=shapeA[shapeA.length-i-1];if(a==null){a=1}var b=shapeB[shapeB.length-i-1];if(b==null){b=1}if(a===1){result.unshift(b)}else if(b===1){result.unshift(a)}else if(a!==b){var errMsg="Operands could not be broadcast together with shapes "+(shapeA+" and "+shapeB+".");throw Error(errMsg)}else{result.unshift(a)}}return result}function equal_(a,b){var _a;var $a=convertToTensor(a,"a","equal","string_or_numeric");var $b=convertToTensor(b,"b","equal","string_or_numeric");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];assertAndGetBroadcastShape($a.shape,$b.shape);var inputs={a:$a,b:$b};return ENGINE.runKernel(Equal,inputs)}var equal=op({equal_:equal_});function where_(condition,a,b){var $a=convertToTensor(a,"a","where");var $b=convertToTensor(b,"b","where");var $condition=convertToTensor(condition,"condition","where","bool");var broadcastShape=assertAndGetBroadcastShape(assertAndGetBroadcastShape($condition.shape,$a.shape),$b.shape);var $broadcastedCondition=broadcastTo($condition,broadcastShape);var $broadcastedA=broadcastTo($a,broadcastShape);var $broadcastedB=broadcastTo($b,broadcastShape);var inputs={condition:$broadcastedCondition,t:$broadcastedA,e:$broadcastedB};return ENGINE.runKernel(Select,inputs)}var where=op({where_:where_});function zerosLike_(x){var $x=convertToTensor(x,"x","zerosLike");var inputs={x:$x};return ENGINE.runKernel(ZerosLike,inputs)}var zerosLike=op({zerosLike_:zerosLike_});function divNoNan_(a,b){var _a;var $a=convertToTensor(a,"a","div");var $b=convertToTensor(b,"b","div");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];var divResult=div($a,$b);var zeros=zerosLike(divResult);var bEqualsZero=equal($b,zeros);return where(bEqualsZero,zeros,divResult)}var divNoNan=op({divNoNan_:divNoNan_});function dot_(t1,t2){var $t1=convertToTensor(t1,"t1","dot");var $t2=convertToTensor(t2,"t2","dot");assert(($t1.rank===1||$t1.rank===2)&&($t2.rank===1||$t2.rank===2),function(){return"Error in dot: inputs must all be rank 1 or 2, but got ranks "+($t1.rank+" and "+$t2.rank+".")});var t1Inner=$t1.rank===1?$t1.size:$t1.shape[1];var t2Inner=$t2.rank===1?$t2.size:$t2.shape[0];assert(t1Inner===t2Inner,function(){return"Error in dot: inner dimensions of inputs must match, but got "+(t1Inner+" and "+t2Inner+".")});if($t1.rank===1&&$t2.rank===1){var t12D=reshape($t1,[1,-1]);var t22D=reshape($t2,[-1,1]);var t1t2=matMul$1(t12D,t22D);return reshape(t1t2,[])}else if($t1.rank===1&&$t2.rank===2){var t12D=reshape($t1,[1,-1]);var t22D=reshape($t2,[$t2.shape[0],$t2.shape[1]]);var t1t2=matMul$1(t12D,t22D);return reshape(t1t2,[t1t2.size])}else if($t1.rank===2&&$t2.rank===1){var t22D=reshape($t2,[-1,1]);var t1t2=matMul$1($t1,t22D);return reshape(t1t2,[t1t2.size])}else{var t22D=reshape($t2,[$t2.shape[0],$t2.shape[1]]);var t1t2=matMul$1($t1,t22D);return t1t2}}var dot=op({dot_:dot_});function einsum_(equation){var tensors=[];for(var _i=1;_i<arguments.length;_i++){tensors[_i-1]=arguments[_i]}var $tensors=tensors.map(function(t,i){return convertToTensor(t,"tensors"+i,"einsum")});var attrs={equation:equation};return ENGINE.runKernel(Einsum,$tensors,attrs)}var einsum=op({einsum_:einsum_});function elu_(x){var $x=convertToTensor(x,"x","elu","float32");var inputs={x:$x};return ENGINE.runKernel(Elu,inputs)}var elu=op({elu_:elu_});function erf_(x){var $x=convertToTensor(x,"x","erf");assert($x.dtype==="int32"||$x.dtype==="float32",function(){return"Input dtype must be `int32` or `float32`."});if($x.dtype==="int32"){$x=cast($x,"float32")}var inputs={x:$x};return ENGINE.runKernel(Erf,inputs)}var erf=op({erf_:erf_});function exp_(x){var $x=convertToTensor(x,"x","exp");var inputs={x:$x};return ENGINE.runKernel(Exp,inputs)}var exp=op({exp_:exp_});function expandDims_(x,axis){if(axis===void 0){axis=0}var $x=convertToTensor(x,"x","expandDims","string_or_numeric");assert(axis<=$x.rank,function(){return"Axis must be <= rank of the tensor"});var inputs={input:$x};var attrs={dim:axis};return ENGINE.runKernel(ExpandDims,inputs,attrs)}var expandDims=op({expandDims_:expandDims_});function expm1_(x){var $x=convertToTensor(x,"x","expm1");var inputs={x:$x};return ENGINE.runKernel(Expm1,inputs)}var expm1=op({expm1_:expm1_});function tile_(x,reps){var $x=convertToTensor(x,"x","tile","string_or_numeric");assert($x.rank===reps.length,function(){return"Error in transpose: rank of input "+$x.rank+" "+("must match length of reps "+reps+".")});var inputs={x:$x};var attrs={reps:reps};return ENGINE.runKernel(Tile,inputs,attrs)}var tile=op({tile_:tile_});function eye_(numRows,numColumns,batchShape,dtype){if(dtype===void 0){dtype="float32"}if(numColumns==null){numColumns=numRows}var buff=buffer([numRows,numColumns],dtype);var n=numRows<=numColumns?numRows:numColumns;for(var i=0;i<n;++i){buff.set(1,i,i)}var out=reshape(buff.toTensor(),[numRows,numColumns]);if(batchShape==null){return out}else{if(batchShape.length===1){return tile(expandDims(out,0),[batchShape[0],1,1])}else if(batchShape.length===2){return tile(expandDims(expandDims(out,0),0),[batchShape[0],batchShape[1],1,1])}else if(batchShape.length===3){return tile(expandDims(expandDims(expandDims(out,0),0),0),[batchShape[0],batchShape[1],batchShape[2],1,1])}else{throw new Error("eye() currently supports only 1D and 2D "+("batchShapes, but received "+batchShape.length+"D."))}}}var eye=op({eye_:eye_});function fill(shape,value,dtype){var attrs={shape:shape,value:value,dtype:dtype};return ENGINE.runKernel(Fill,{},attrs)}function floor_(x){var $x=convertToTensor(x,"x","floor","float32");var inputs={x:$x};return ENGINE.runKernel(Floor,inputs)}var floor=op({floor_:floor_});function gather_(x,indices,axis,batchDims){if(axis===void 0){axis=0}if(batchDims===void 0){batchDims=0}var $x=convertToTensor(x,"x","gather");var $indices=convertToTensor(indices,"indices","gather","int32");var inputs={x:$x,indices:$indices};var attrs={axis:axis,batchDims:batchDims};return ENGINE.runKernel(GatherV2,inputs,attrs)}var gather=op({gather_:gather_});function greater_(a,b){var _a;var $a=convertToTensor(a,"a","greater","string_or_numeric");var $b=convertToTensor(b,"b","greater","string_or_numeric");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];assertAndGetBroadcastShape($a.shape,$b.shape);var inputs={a:$a,b:$b};return ENGINE.runKernel(Greater,inputs)}var greater=op({greater_:greater_});function greaterEqual_(a,b){var _a;var $a=convertToTensor(a,"a","greaterEqual","string_or_numeric");var $b=convertToTensor(b,"b","greaterEqual","string_or_numeric");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];assertAndGetBroadcastShape($a.shape,$b.shape);var inputs={a:$a,b:$b};return ENGINE.runKernel(GreaterEqual,inputs)}var greaterEqual=op({greaterEqual_:greaterEqual_});function imag_(input){var $input=convertToTensor(input,"input","imag");var inputs={input:$input};return ENGINE.runKernel(Imag,inputs)}var imag=op({imag_:imag_});function isFinite_(x){var $x=convertToTensor(x,"x","isFinite");var inputs={x:$x};return ENGINE.runKernel(IsFinite,inputs)}var isFinite$1=op({isFinite_:isFinite_});function isInf_(x){var $x=convertToTensor(x,"x","isInf");var inputs={x:$x};return ENGINE.runKernel(IsInf,inputs)}var isInf=op({isInf_:isInf_});function isNaN_(x){var $x=convertToTensor(x,"x","isNaN");var inputs={x:$x};return ENGINE.runKernel(IsNan,inputs)}var isNaN$1=op({isNaN_:isNaN_});function leakyRelu_(x,alpha){if(alpha===void 0){alpha=.2}var $x=convertToTensor(x,"x","leakyRelu");var inputs={x:$x};var attrs={alpha:alpha};return ENGINE.runKernel(LeakyRelu,inputs,attrs)}var leakyRelu=op({leakyRelu_:leakyRelu_});function less_(a,b){var _a;var $a=convertToTensor(a,"a","less","string_or_numeric");var $b=convertToTensor(b,"b","less","string_or_numeric");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];assertAndGetBroadcastShape($a.shape,$b.shape);var inputs={a:$a,b:$b};return ENGINE.runKernel(Less,inputs)}var less=op({less_:less_});function lessEqual_(a,b){var _a;var $a=convertToTensor(a,"a","lessEqual","string_or_numeric");var $b=convertToTensor(b,"b","lessEqual","string_or_numeric");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];assertAndGetBroadcastShape($a.shape,$b.shape);var inputs={a:$a,b:$b};return ENGINE.runKernel(LessEqual,inputs)}var lessEqual=op({lessEqual_:lessEqual_});function linspace(start,stop,num){if(num<=0){throw new Error("The number of values should be positive.")}var attrs={start:start,stop:stop,num:num};return ENGINE.runKernel(LinSpace,{},attrs)}function localResponseNormalization_(x,depthRadius,bias,alpha,beta){if(depthRadius===void 0){depthRadius=5}if(bias===void 0){bias=1}if(alpha===void 0){alpha=1}if(beta===void 0){beta=.5}var $x=convertToTensor(x,"x","localResponseNormalization");assert($x.rank===4||$x.rank===3,function(){return"Error in localResponseNormalization: x must be rank 3 or 4 but got\n               rank "+$x.rank+"."});assert(isInt(depthRadius),function(){return"Error in localResponseNormalization: depthRadius must be an "+("integer but got depthRadius "+depthRadius+".")});var x4D=$x;var reshapedTo4D=false;if($x.rank===3){reshapedTo4D=true;x4D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2]])}var inputs={x:x4D};var attrs={depthRadius:depthRadius,bias:bias,alpha:alpha,beta:beta};var res=ENGINE.runKernel(LRN,inputs,attrs);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}else{return res}}var localResponseNormalization=op({localResponseNormalization_:localResponseNormalization_});function log_(x){var $x=convertToTensor(x,"x","log","float32");var inputs={x:$x};return ENGINE.runKernel(Log,inputs)}var log=op({log_:log_});function log1p_(x){var $x=convertToTensor(x,"x","log1p");var inputs={x:$x};return ENGINE.runKernel(Log1p,inputs)}var log1p=op({log1p_:log1p_});function customGrad(f){return ENGINE.customGrad(f)}function neg_(x){var $x=convertToTensor(x,"x","neg");var inputs={x:$x};return ENGINE.runKernel(Neg,inputs)}var neg=op({neg_:neg_});function softplus_(x){var $x=convertToTensor(x,"x","softplus");var inputs={x:$x};return ENGINE.runKernel(Softplus,inputs)}var softplus=op({softplus_:softplus_});function logSigmoid_(x){var $x=convertToTensor(x,"x","logSigmoid");var customOp=customGrad(function(x){var value=neg(softplus(neg(x)));var gradFunc=function(dy){var derX=mul(dy,sigmoid(neg(x)));return derX};return{value:value,gradFunc:gradFunc}});return customOp($x)}var logSigmoid=op({logSigmoid_:logSigmoid_});function max_(x,axis,keepDims){if(axis===void 0){axis=null}if(keepDims===void 0){keepDims=false}var $x=convertToTensor(x,"x","max");var inputs={x:$x};var attrs={reductionIndices:axis,keepDims:keepDims};return ENGINE.runKernel(Max,inputs,attrs)}var max=op({max_:max_});function sub_(a,b){var _a;var $a=convertToTensor(a,"a","sub");var $b=convertToTensor(b,"b","sub");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];var inputs={a:$a,b:$b};return ENGINE.runKernel(Sub,inputs)}var sub=op({sub_:sub_});function sum_(x,axis,keepDims){if(axis===void 0){axis=null}if(keepDims===void 0){keepDims=false}var $x=convertToTensor(x,"x","sum");if($x.dtype==="bool"){$x=cast($x,"int32")}var inputs={x:$x};var attrs={axis:axis,keepDims:keepDims};return ENGINE.runKernel(Sum,inputs,attrs)}var sum=op({sum_:sum_});function logSoftmax_(logits,axis){if(axis===void 0){axis=-1}var $logits=convertToTensor(logits,"logits","logSoftmax");if(axis===-1){axis=$logits.rank-1}if(axis!==$logits.rank-1){throw Error("Log Softmax along a non-last dimension is not yet supported. "+("Logits was rank "+$logits.rank+" and axis was "+axis))}var customOp=customGrad(function(logits,save){var keepDims=true;var xMax=max(logits,axis,true);var shifted=sub(logits,xMax);var value=sub(cast(shifted,"float32"),log(sum(exp(shifted),axis,keepDims)));save([value]);var gradFunc=function(dy,saved){var _a=__read(saved,1),value=_a[0];var keepDims=true;var softmax=exp(value);return sub(dy,mul(sum(dy,axis,keepDims),softmax))};return{value:value,gradFunc:gradFunc}});return customOp($logits)}var logSoftmax=op({logSoftmax_:logSoftmax_});function combineLocations(outputLoc,reduceLoc,axes){var rank=outputLoc.length+reduceLoc.length;var loc=[];var outIdx=0;var reduceIdx=0;for(var dim=0;dim<rank;dim++){if(axes.indexOf(dim)===-1){loc.push(outputLoc[outIdx++])}else{loc.push(reduceLoc[reduceIdx++])}}return loc}function expandShapeToKeepDim(shape,axes){var reduceSubShape=axes.map(function(x){return 1});return combineLocations(shape,reduceSubShape,axes)}function logSumExp_(x,axis,keepDims){if(axis===void 0){axis=null}if(keepDims===void 0){keepDims=false}var $x=convertToTensor(x,"x","logSumExp");var axes=parseAxisParam(axis,$x.shape);var xMax=max($x,axes,true);var a=sub($x,xMax);var b=exp(a);var c=sum(b,axes);var d=log(c);var res=add(reshape(xMax,d.shape),d);if(keepDims){var newShape=expandShapeToKeepDim(res.shape,axes);return reshape(res,newShape)}return res}var logSumExp=op({logSumExp_:logSumExp_});function logicalAnd_(a,b){var $a=convertToTensor(a,"a","logicalAnd","bool");var $b=convertToTensor(b,"b","logicalAnd","bool");assertAndGetBroadcastShape($a.shape,$b.shape);var inputs={a:$a,b:$b};return ENGINE.runKernel(LogicalAnd,inputs)}var logicalAnd=op({logicalAnd_:logicalAnd_});function logicalNot_(x){var $x=convertToTensor(x,"x","logicalNot","bool");var inputs={x:$x};return ENGINE.runKernel(LogicalNot,inputs)}var logicalNot=op({logicalNot_:logicalNot_});function logicalOr_(a,b){var $a=convertToTensor(a,"a","logicalOr","bool");var $b=convertToTensor(b,"b","logicalOr","bool");assertAndGetBroadcastShape($a.shape,$b.shape);var inputs={a:$a,b:$b};return ENGINE.runKernel(LogicalOr,inputs)}var logicalOr=op({logicalOr_:logicalOr_});function logicalXor_(a,b){var $a=convertToTensor(a,"a","logicalXor","bool");var $b=convertToTensor(b,"b","logicalXor","bool");assertAndGetBroadcastShape($a.shape,$b.shape);return logicalAnd(logicalOr(a,b),logicalNot(logicalAnd(a,b)))}var logicalXor=op({logicalXor_:logicalXor_});function maxPool_(x,filterSize,strides,pad,dimRoundingMode){var $x=convertToTensor(x,"x","maxPool");var dilations=1;var x4D=$x;var reshapedTo4D=false;if($x.rank===3){reshapedTo4D=true;x4D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2]])}assert(x4D.rank===4,function(){return"Error in maxPool: input must be rank 4 but got rank "+x4D.rank+"."});assert(eitherStridesOrDilationsAreOne(strides,dilations),function(){return"Error in maxPool: Either strides or dilations must be 1. "+("Got strides "+strides+" and dilations '"+dilations+"'")});if(dimRoundingMode!=null){assert(isInt(pad),function(){return"Error in maxPool: pad must be an integer when using, "+("dimRoundingMode "+dimRoundingMode+" but got pad "+pad+".")})}var inputs={x:x4D};var attrs={filterSize:filterSize,strides:strides,pad:pad,dimRoundingMode:dimRoundingMode};var res=ENGINE.runKernel(MaxPool,inputs,attrs);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return res}var maxPool=op({maxPool_:maxPool_});function maxPool3d_(x,filterSize,strides,pad,dimRoundingMode,dataFormat){if(filterSize===void 0){filterSize=[1,1,1]}if(dataFormat===void 0){dataFormat="NDHWC"}var $x=convertToTensor(x,"x","maxPool3d");var x5D=$x;var reshapedTo5D=false;if($x.rank===4){reshapedTo5D=true;x5D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2],$x.shape[3]])}assert(x5D.rank===5,function(){return"Error in maxPool3d: x must be rank 5 but got rank "+x5D.rank+"."});assert(dataFormat==="NDHWC",function(){return"Error in maxPool3d: Only NDHWC is currently supported, "+("but got dataFormat of "+dataFormat)});if(dimRoundingMode!=null){assert(isInt(pad),function(){return"Error in maxPool3d: pad must be an integer when using, "+("dimRoundingMode "+dimRoundingMode+" but got pad "+pad+".")})}var inputs={x:x5D};var attrs={filterSize:filterSize,strides:strides,pad:pad,dimRoundingMode:dimRoundingMode,dataFormat:dataFormat};var res=ENGINE.runKernel(MaxPool3D,inputs,attrs);if(reshapedTo5D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3],res.shape[4]])}return res}var maxPool3d=op({maxPool3d_:maxPool3d_});function maxPoolWithArgmax_(x,filterSize,strides,pad,includeBatchInIndex){if(includeBatchInIndex===void 0){includeBatchInIndex=false}var $x=convertToTensor(x,"x","maxPoolWithArgmax");var inputs={x:$x};var attrs={filterSize:filterSize,strides:strides,pad:pad,includeBatchInIndex:includeBatchInIndex};var result=ENGINE.runKernel(MaxPoolWithArgmax,inputs,attrs);return{result:result[0],indexes:result[1]}}var maxPoolWithArgmax=op({maxPoolWithArgmax_:maxPoolWithArgmax_});function maximum_(a,b){var _a;var $a=convertToTensor(a,"a","maximum");var $b=convertToTensor(b,"b","maximum");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];if($a.dtype==="bool"){$a=cast($a,"int32");$b=cast($b,"int32")}assertAndGetBroadcastShape($a.shape,$b.shape);var inputs={a:$a,b:$b};return ENGINE.runKernel(Maximum,inputs)}var maximum=op({maximum_:maximum_});function mean_(x,axis,keepDims){if(axis===void 0){axis=null}if(keepDims===void 0){keepDims=false}var $x=convertToTensor(x,"x","mean");var inputs={x:$x};var attrs={axis:axis,keepDims:keepDims};return ENGINE.runKernel(Mean,inputs,attrs)}var mean=op({mean_:mean_});function zeros(shape,dtype){if(dtype===void 0){dtype="float32"}if(dtype==="complex64"){var real=zeros(shape,"float32");var imag=zeros(shape,"float32");return complex(real,imag)}var values=makeZerosTypedArray(sizeFromShape(shape),dtype);return ENGINE.makeTensor(values,shape,dtype)}function ones(shape,dtype){if(dtype===void 0){dtype="float32"}if(dtype==="complex64"){var real=ones(shape,"float32");var imag=zeros(shape,"float32");return complex(real,imag)}var values=makeOnesTypedArray(sizeFromShape(shape),dtype);return ENGINE.makeTensor(values,shape,dtype)}function meshgrid(x,y,_a){var _b=(_a===void 0?{}:_a).indexing,indexing=_b===void 0?"xy":_b;if(indexing!=="xy"&&indexing!=="ij"){throw new TypeError(indexing+" is not a valid third argument to meshgrid")}if(x===undefined){return[]}var $x=convertToTensor(x,"x","meshgrid",x instanceof Tensor?x.dtype:"float32");if(y===undefined){return[$x]}var $y=convertToTensor(y,"y","meshgrid",y instanceof Tensor?y.dtype:"float32");var w=sizeFromShape($x.shape);var h=sizeFromShape($y.shape);if(indexing==="xy"){$x=reshape($x,[1,-1]);$y=reshape($y,[-1,1]);return[matMul$1(ones([h,1],$x.dtype),$x),matMul$1($y,ones([1,w],$y.dtype))]}$x=reshape($x,[-1,1]);$y=reshape($y,[1,-1]);return[matMul$1($x,ones([1,h],$x.dtype)),matMul$1(ones([w,1],$y.dtype),$y)]}function min_(x,axis,keepDims){if(axis===void 0){axis=null}if(keepDims===void 0){keepDims=false}var $x=convertToTensor(x,"x","min");var inputs={x:$x};var attrs={axis:axis,keepDims:keepDims};return ENGINE.runKernel(Min,inputs,attrs)}var min=op({min_:min_});function minimum_(a,b){var _a;var $a=convertToTensor(a,"a","minimum");var $b=convertToTensor(b,"b","minimum");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];if($a.dtype==="bool"){$a=cast($a,"int32");$b=cast($b,"int32")}assertAndGetBroadcastShape($a.shape,$b.shape);var inputs={a:$a,b:$b};return ENGINE.runKernel(Minimum,inputs)}var minimum=op({minimum_:minimum_});function mirrorPad_(x,paddings,mode){assert(mode==="reflect"||mode==="symmetric",function(){return"Invalid mode. Mode must be either reflect or symmetric. "+("Got "+mode+".")});var $x=convertToTensor(x,"x","mirrorPad");if($x.rank===0){throw new Error("mirrorPad(scalar) is not defined. "+"Pass non-scalar to mirrorPad")}assert(paddings.length===$x.rank,function(){return"Padding doesn't match input. Must be "+$x.rank+". "+("Got "+paddings.length+".")});var shapeOffset=mode==="reflect"?1:0;var _loop_1=function(i){assert(paddings[i].length===2,function(){return"Invalid number of paddings. Must be length of 2 each."});assert(paddings[i][0]>=0&&paddings[i][0]<=$x.shape[i]-shapeOffset&&paddings[i][1]>=0&&paddings[i][1]<=$x.shape[i]-shapeOffset,function(){return"Padding in dimension "+i+" cannot be greater than or equal "+("to "+($x.shape[i]-shapeOffset)+" or less than 0 for input of ")+("shape "+$x.shape)})};for(var i=0;i<$x.rank;i++){_loop_1(i)}var attrs={paddings:paddings,mode:mode};var inputs={x:$x};return ENGINE.runKernel(MirrorPad,inputs,attrs)}var mirrorPad=op({mirrorPad_:mirrorPad_});function mod_(a,b){var _a;var $a=convertToTensor(a,"a","mod");var $b=convertToTensor(b,"b","mod");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];var inputs={a:$a,b:$b};return ENGINE.runKernel(Mod,inputs)}var mod=op({mod_:mod_});function square_(x){var $x=convertToTensor(x,"x","square");var attrs={};return ENGINE.runKernel("Square",{x:$x},attrs)}var square=op({square_:square_});function moments_(x,axis,keepDims){if(axis===void 0){axis=null}if(keepDims===void 0){keepDims=false}x=convertToTensor(x,"x","moments");var axes=parseAxisParam(axis,x.shape);var xMean=mean(x,axes,keepDims);var keepDimsShape=xMean.shape;if(!keepDims){keepDimsShape=expandShapeToKeepDim(xMean.shape,axes)}var devSquared=square(sub(cast(x,"float32"),reshape(xMean,keepDimsShape)));var variance=mean(devSquared,axes,keepDims);return{mean:xMean,variance:variance}}var moments=op({moments_:moments_});function multiRNNCell_(lstmCells,data,c,h){var $data=convertToTensor(data,"data","multiRNNCell");var $c=convertToTensorArray(c,"c","multiRNNCell");var $h=convertToTensorArray(h,"h","multiRNNCell");var input=$data;var newStates=[];for(var i=0;i<lstmCells.length;i++){var output=lstmCells[i](input,$c[i],$h[i]);newStates.push(output[0]);newStates.push(output[1]);input=output[1]}var newC=[];var newH=[];for(var i=0;i<newStates.length;i+=2){newC.push(newStates[i]);newH.push(newStates[i+1])}return[newC,newH]}var multiRNNCell=op({multiRNNCell_:multiRNNCell_});function multinomial_(logits,numSamples,seed,normalized){if(normalized===void 0){normalized=false}var $logits=convertToTensor(logits,"logits","multinomial");var numOutcomes=$logits.size;var origRank=$logits.rank;if(numOutcomes<2){throw new Error("Error in multinomial: you need at least 2 outcomes, but got "+(numOutcomes+"."))}if(origRank>2){throw new Error("Rank of probabilities must be 1 or 2, but is "+origRank)}seed=seed||Math.random();var logits2D=origRank===1?reshape($logits,[1,-1]):$logits;var inputs={logits:logits2D};var attrs={numSamples:numSamples,seed:seed,normalized:normalized};var res=ENGINE.runKernel(Multinomial,inputs,attrs);return origRank===1?reshape(res,[res.size]):res}var multinomial=op({multinomial_:multinomial_});function notEqual_(a,b){var _a;var $a=convertToTensor(a,"a","notEqual","string_or_numeric");var $b=convertToTensor(b,"b","notEqual","string_or_numeric");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];assertAndGetBroadcastShape($a.shape,$b.shape);var inputs={a:$a,b:$b};return ENGINE.runKernel(NotEqual,inputs)}var notEqual=op({notEqual_:notEqual_});function oneHot_(indices,depth,onValue,offValue){if(onValue===void 0){onValue=1}if(offValue===void 0){offValue=0}if(depth<2){throw new Error("Error in oneHot: depth must be >=2, but it is "+depth)}var $indices=convertToTensor(indices,"indices","oneHot","int32");var inputs={indices:$indices};var attrs={depth:depth,onValue:onValue,offValue:offValue};return ENGINE.runKernel(OneHot,inputs,attrs)}var oneHot=op({oneHot_:oneHot_});function onesLike_(x){var $x=convertToTensor(x,"x","onesLike");var inputs={x:$x};return ENGINE.runKernel(OnesLike,inputs)}var onesLike=op({onesLike_:onesLike_});function outerProduct_(v1,v2){var $v1=convertToTensor(v1,"v1","outerProduct");var $v2=convertToTensor(v2,"v2","outerProduct");assert($v1.rank===1&&$v2.rank===1,function(){return"Error in outerProduct: inputs must be rank 1, but got ranks "+($v1.rank+" and "+$v2.rank+".")});var v12D=reshape($v1,[-1,1]);var v22D=reshape($v2,[1,-1]);return matMul$1(v12D,v22D)}var outerProduct=op({outerProduct_:outerProduct_});function pad_(x,paddings,constantValue){if(constantValue===void 0){constantValue=0}var $x=convertToTensor(x,"x","pad");if($x.rank===0){throw new Error("pad(scalar) is not defined. Pass non-scalar to pad")}var attrs={paddings:paddings,constantValue:constantValue};var inputs={x:$x};return ENGINE.runKernel(PadV2,inputs,attrs)}var pad=op({pad_:pad_});function pad1d_(x,paddings,constantValue){if(constantValue===void 0){constantValue=0}assert(paddings.length===2,function(){return"Invalid number of paddings. Must be length of 2."});return pad(x,[paddings],constantValue)}var pad1d=op({pad1d_:pad1d_});function pad2d_(x,paddings,constantValue){if(constantValue===void 0){constantValue=0}assert(paddings.length===2&&paddings[0].length===2&&paddings[1].length===2,function(){return"Invalid number of paddings. Must be length of 2 each."});return pad(x,paddings,constantValue)}var pad2d=op({pad2d_:pad2d_});function pad3d_(x,paddings,constantValue){if(constantValue===void 0){constantValue=0}assert(paddings.length===3&&paddings[0].length===2&&paddings[1].length===2&&paddings[2].length===2,function(){return"Invalid number of paddings. Must be length of 2 each."});return pad(x,paddings,constantValue)}var pad3d=op({pad3d_:pad3d_});function pad4d_(x,paddings,constantValue){if(constantValue===void 0){constantValue=0}assert(paddings.length===4&&paddings[0].length===2&&paddings[1].length===2&&paddings[2].length===2&&paddings[3].length===2,function(){return"Invalid number of paddings. Must be length of 2 each."});return pad(x,paddings,constantValue)}var pad4d=op({pad4d_:pad4d_});function spaceToBatchND_(x,blockShape,paddings){var $x=convertToTensor(x,"x","spaceToBatchND");assert($x.rank>=1+blockShape.length,function(){return"input rank "+$x.rank+" should be > than [blockShape] "+blockShape.length});assert(paddings.length===blockShape.length,function(){return"paddings.shape[0] "+paddings.length+" must be equal to [blockShape] "+blockShape.length});assert($x.shape.reduce(function(a,b,i){if(i>0&&i<=blockShape.length){return a&&(b+paddings[i-1][0]+paddings[i-1][1])%blockShape[i-1]===0}return a},true),function(){return"input spatial dimensions "+$x.shape.slice(1)+" with paddings "+paddings.toString()+" must be divisible by blockShapes "+blockShape.toString()});var inputs={x:$x};var attrs={blockShape:blockShape,paddings:paddings};return ENGINE.runKernel(SpaceToBatchND,inputs,attrs)}var spaceToBatchND=op({spaceToBatchND_:spaceToBatchND_});function pool_(input,windowShape,poolingType,pad,dilations,strides){if(dilations==null){dilations=[1,1]}if(strides==null){strides=1}if(pad===0){pad="valid"}var $x=convertToTensor(input,"x","maxPool");var x4D=$x;var reshapedTo4D=false;if($x.rank===3){reshapedTo4D=true;x4D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2]])}assert(eitherStridesOrDilationsAreOne(strides,dilations),function(){return"Error in pool: Either strides or dilations must be 1. "+("Got strides "+strides+" and dilations '"+dilations+"'")});var convInfo=computePool2DInfo(x4D.shape,windowShape,strides,dilations,pad);var dilation=[convInfo.dilationHeight,convInfo.dilationWidth];var basePadding;if(pad==="same"){basePadding=withSpaceToBatchBasePaddings([convInfo.filterHeight,convInfo.filterWidth],dilation)}else{basePadding=[[0,0],[0,0]]}var isDilationOne=dilation[0]===1&&dilation[1]===1;var _a=__read(requiredSpaceToBatchPaddings([convInfo.inHeight,convInfo.inWidth],dilation,basePadding),2),adjustedPadding=_a[0],adjustedCrops=_a[1];var convertedPad=isDilationOne?pad:"valid";var convertedX=isDilationOne?x4D:spaceToBatchND(x4D,dilation,adjustedPadding);var forwardOp=poolingType==="avg"?function(){return avgPool(convertedX,windowShape,strides,convertedPad)}:function(){return maxPool(convertedX,windowShape,strides,convertedPad)};var y=forwardOp();var res=isDilationOne?y:batchToSpaceND(y,dilation,adjustedCrops);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return res}function requiredSpaceToBatchPaddings(inputShape,blockShape,basePadding){var padStart=basePadding.map(function(b){return b[0]});var origPadEnd=basePadding.map(function(b){return b[1]});var fullInputShape=inputShape.concat(padStart,origPadEnd);var padEndExtra=blockShape.map(function(b,i){return(b-fullInputShape[i]%b)%b});var padEnd=origPadEnd.map(function(s,i){return s+padEndExtra[i]});var paddings=blockShape.map(function(_,i){return[padStart[i],padEnd[i]]});var crops=blockShape.map(function(_,i){return[0,padEndExtra[i]]});return[paddings,crops]}function withSpaceToBatchBasePaddings(filterShape,dilation){var dilatedFilterShape=filterShape.map(function(s,i){return s+(s-1)*(dilation[i]-1)});var padExtraShape=dilatedFilterShape.map(function(s){return s-1});var padExtraStart=padExtraShape.map(function(s){return Math.floor(s/2)});var padExtraEnd=padExtraShape.map(function(s,i){return s-padExtraStart[i]});return padExtraShape.map(function(_,i){return[padExtraStart[i],padExtraEnd[i]]})}var pool=op({pool_:pool_});function pow_(base,exp){var _a;var $base=convertToTensor(base,"base","pow");var $exp=convertToTensor(exp,"exp","pow");_a=__read(makeTypesMatch($base,$exp),2),$base=_a[0],$exp=_a[1];var inputs={a:$base,b:$exp};return ENGINE.runKernel(Pow,inputs)}var pow=op({pow_:pow_});function prelu_(x,alpha){var $x=convertToTensor(x,"x","prelu");var $alpha=convertToTensor(alpha,"alpha","prelu");var inputs={x:$x,alpha:$alpha};return ENGINE.runKernel(Prelu,inputs)}var prelu=op({prelu_:prelu_});function print(x,verbose){if(verbose===void 0){verbose=false}console.log(x.toString(verbose))}function prod_(x,axis,keepDims){if(axis===void 0){axis=null}if(keepDims===void 0){keepDims=false}var $x=convertToTensor(x,"x","prod");if($x.dtype==="bool"){$x=cast($x,"int32")}var inputs={x:$x};var attrs={axis:axis,keepDims:keepDims};return ENGINE.runKernel(Prod,inputs,attrs)}var prod=op({prod_:prod_});function rand_(shape,randFunction,dtype){var size=sizeFromShape(shape);var values=null;if(dtype==null||dtype==="float32"){values=new Float32Array(size)}else if(dtype==="int32"){values=new Int32Array(size)}else if(dtype==="bool"){values=new Uint8Array(size)}else{throw new Error("Unknown data type "+dtype)}for(var i=0;i<size;i++){values[i]=randFunction()}return ENGINE.makeTensor(values,shape,dtype)}var rand=op({rand_:rand_});var commonjsGlobal=typeof globalThis!=="undefined"?globalThis:typeof window!=="undefined"?window:typeof global!=="undefined"?global:typeof self!=="undefined"?self:{};function getAugmentedNamespace(n){if(n.__esModule)return n;var a=Object.defineProperty({},"__esModule",{value:true});Object.keys(n).forEach(function(k){var d=Object.getOwnPropertyDescriptor(n,k);Object.defineProperty(a,k,d.get?d:{enumerable:true,get:function(){return n[k]}})});return a}function createCommonjsModule(fn){var module={exports:{}};return fn(module,module.exports),module.exports}var alea=createCommonjsModule(function(module){(function(global,module,define){function Alea(seed){var me=this,mash=Mash();me.next=function(){var t=2091639*me.s0+me.c*2.3283064365386963e-10;me.s0=me.s1;me.s1=me.s2;return me.s2=t-(me.c=t|0)};me.c=1;me.s0=mash(" ");me.s1=mash(" ");me.s2=mash(" ");me.s0-=mash(seed);if(me.s0<0){me.s0+=1}me.s1-=mash(seed);if(me.s1<0){me.s1+=1}me.s2-=mash(seed);if(me.s2<0){me.s2+=1}mash=null}function copy(f,t){t.c=f.c;t.s0=f.s0;t.s1=f.s1;t.s2=f.s2;return t}function impl(seed,opts){var xg=new Alea(seed),state=opts&&opts.state,prng=xg.next;prng.int32=function(){return xg.next()*4294967296|0};prng.double=function(){return prng()+(prng()*2097152|0)*11102230246251565e-32};prng.quick=prng;if(state){if(typeof state=="object")copy(state,xg);prng.state=function(){return copy(xg,{})}}return prng}function Mash(){var n=4022871197;var mash=function(data){data=String(data);for(var i=0;i<data.length;i++){n+=data.charCodeAt(i);var h=.02519603282416938*n;n=h>>>0;h-=n;h*=n;n=h>>>0;h-=n;n+=h*4294967296}return(n>>>0)*2.3283064365386963e-10};return mash}if(module&&module.exports){module.exports=impl}else if(define&&define.amd){define(function(){return impl})}else{this.alea=impl}})(commonjsGlobal,module,typeof undefined=="function")});var xor128=createCommonjsModule(function(module){(function(global,module,define){function XorGen(seed){var me=this,strseed="";me.x=0;me.y=0;me.z=0;me.w=0;me.next=function(){var t=me.x^me.x<<11;me.x=me.y;me.y=me.z;me.z=me.w;return me.w^=me.w>>>19^t^t>>>8};if(seed===(seed|0)){me.x=seed}else{strseed+=seed}for(var k=0;k<strseed.length+64;k++){me.x^=strseed.charCodeAt(k)|0;me.next()}}function copy(f,t){t.x=f.x;t.y=f.y;t.z=f.z;t.w=f.w;return t}function impl(seed,opts){var xg=new XorGen(seed),state=opts&&opts.state,prng=function(){return(xg.next()>>>0)/4294967296};prng.double=function(){do{var top=xg.next()>>>11,bot=(xg.next()>>>0)/4294967296,result=(top+bot)/(1<<21)}while(result===0);return result};prng.int32=xg.next;prng.quick=prng;if(state){if(typeof state=="object")copy(state,xg);prng.state=function(){return copy(xg,{})}}return prng}if(module&&module.exports){module.exports=impl}else if(define&&define.amd){define(function(){return impl})}else{this.xor128=impl}})(commonjsGlobal,module,typeof undefined=="function")});var xorwow=createCommonjsModule(function(module){(function(global,module,define){function XorGen(seed){var me=this,strseed="";me.next=function(){var t=me.x^me.x>>>2;me.x=me.y;me.y=me.z;me.z=me.w;me.w=me.v;return(me.d=me.d+362437|0)+(me.v=me.v^me.v<<4^(t^t<<1))|0};me.x=0;me.y=0;me.z=0;me.w=0;me.v=0;if(seed===(seed|0)){me.x=seed}else{strseed+=seed}for(var k=0;k<strseed.length+64;k++){me.x^=strseed.charCodeAt(k)|0;if(k==strseed.length){me.d=me.x<<10^me.x>>>4}me.next()}}function copy(f,t){t.x=f.x;t.y=f.y;t.z=f.z;t.w=f.w;t.v=f.v;t.d=f.d;return t}function impl(seed,opts){var xg=new XorGen(seed),state=opts&&opts.state,prng=function(){return(xg.next()>>>0)/4294967296};prng.double=function(){do{var top=xg.next()>>>11,bot=(xg.next()>>>0)/4294967296,result=(top+bot)/(1<<21)}while(result===0);return result};prng.int32=xg.next;prng.quick=prng;if(state){if(typeof state=="object")copy(state,xg);prng.state=function(){return copy(xg,{})}}return prng}if(module&&module.exports){module.exports=impl}else if(define&&define.amd){define(function(){return impl})}else{this.xorwow=impl}})(commonjsGlobal,module,typeof undefined=="function")});var xorshift7=createCommonjsModule(function(module){(function(global,module,define){function XorGen(seed){var me=this;me.next=function(){var X=me.x,i=me.i,t,v;t=X[i];t^=t>>>7;v=t^t<<24;t=X[i+1&7];v^=t^t>>>10;t=X[i+3&7];v^=t^t>>>3;t=X[i+4&7];v^=t^t<<7;t=X[i+7&7];t=t^t<<13;v^=t^t<<9;X[i]=v;me.i=i+1&7;return v};function init(me,seed){var j,X=[];if(seed===(seed|0)){X[0]=seed}else{seed=""+seed;for(j=0;j<seed.length;++j){X[j&7]=X[j&7]<<15^seed.charCodeAt(j)+X[j+1&7]<<13}}while(X.length<8)X.push(0);for(j=0;j<8&&X[j]===0;++j);if(j==8)X[7]=-1;me.x=X;me.i=0;for(j=256;j>0;--j){me.next()}}init(me,seed)}function copy(f,t){t.x=f.x.slice();t.i=f.i;return t}function impl(seed,opts){if(seed==null)seed=+new Date;var xg=new XorGen(seed),state=opts&&opts.state,prng=function(){return(xg.next()>>>0)/4294967296};prng.double=function(){do{var top=xg.next()>>>11,bot=(xg.next()>>>0)/4294967296,result=(top+bot)/(1<<21)}while(result===0);return result};prng.int32=xg.next;prng.quick=prng;if(state){if(state.x)copy(state,xg);prng.state=function(){return copy(xg,{})}}return prng}if(module&&module.exports){module.exports=impl}else if(define&&define.amd){define(function(){return impl})}else{this.xorshift7=impl}})(commonjsGlobal,module,typeof undefined=="function")});var xor4096=createCommonjsModule(function(module){(function(global,module,define){function XorGen(seed){var me=this;me.next=function(){var w=me.w,X=me.X,i=me.i,t,v;me.w=w=w+1640531527|0;v=X[i+34&127];t=X[i=i+1&127];v^=v<<13;t^=t<<17;v^=v>>>15;t^=t>>>12;v=X[i]=v^t;me.i=i;return v+(w^w>>>16)|0};function init(me,seed){var t,v,i,j,w,X=[],limit=128;if(seed===(seed|0)){v=seed;seed=null}else{seed=seed+"\0";v=0;limit=Math.max(limit,seed.length)}for(i=0,j=-32;j<limit;++j){if(seed)v^=seed.charCodeAt((j+32)%seed.length);if(j===0)w=v;v^=v<<10;v^=v>>>15;v^=v<<4;v^=v>>>13;if(j>=0){w=w+1640531527|0;t=X[j&127]^=v+w;i=0==t?i+1:0}}if(i>=128){X[(seed&&seed.length||0)&127]=-1}i=127;for(j=4*128;j>0;--j){v=X[i+34&127];t=X[i=i+1&127];v^=v<<13;t^=t<<17;v^=v>>>15;t^=t>>>12;X[i]=v^t}me.w=w;me.X=X;me.i=i}init(me,seed)}function copy(f,t){t.i=f.i;t.w=f.w;t.X=f.X.slice();return t}function impl(seed,opts){if(seed==null)seed=+new Date;var xg=new XorGen(seed),state=opts&&opts.state,prng=function(){return(xg.next()>>>0)/4294967296};prng.double=function(){do{var top=xg.next()>>>11,bot=(xg.next()>>>0)/4294967296,result=(top+bot)/(1<<21)}while(result===0);return result};prng.int32=xg.next;prng.quick=prng;if(state){if(state.X)copy(state,xg);prng.state=function(){return copy(xg,{})}}return prng}if(module&&module.exports){module.exports=impl}else if(define&&define.amd){define(function(){return impl})}else{this.xor4096=impl}})(commonjsGlobal,module,typeof undefined=="function")});var tychei=createCommonjsModule(function(module){(function(global,module,define){function XorGen(seed){var me=this,strseed="";me.next=function(){var b=me.b,c=me.c,d=me.d,a=me.a;b=b<<25^b>>>7^c;c=c-d|0;d=d<<24^d>>>8^a;a=a-b|0;me.b=b=b<<20^b>>>12^c;me.c=c=c-d|0;me.d=d<<16^c>>>16^a;return me.a=a-b|0};me.a=0;me.b=0;me.c=2654435769|0;me.d=1367130551;if(seed===Math.floor(seed)){me.a=seed/4294967296|0;me.b=seed|0}else{strseed+=seed}for(var k=0;k<strseed.length+20;k++){me.b^=strseed.charCodeAt(k)|0;me.next()}}function copy(f,t){t.a=f.a;t.b=f.b;t.c=f.c;t.d=f.d;return t}function impl(seed,opts){var xg=new XorGen(seed),state=opts&&opts.state,prng=function(){return(xg.next()>>>0)/4294967296};prng.double=function(){do{var top=xg.next()>>>11,bot=(xg.next()>>>0)/4294967296,result=(top+bot)/(1<<21)}while(result===0);return result};prng.int32=xg.next;prng.quick=prng;if(state){if(typeof state=="object")copy(state,xg);prng.state=function(){return copy(xg,{})}}return prng}if(module&&module.exports){module.exports=impl}else if(define&&define.amd){define(function(){return impl})}else{this.tychei=impl}})(commonjsGlobal,module,typeof undefined=="function")});var _nodeResolve_empty={};var _nodeResolve_empty$1={__proto__:null,default:_nodeResolve_empty};var require$$0=getAugmentedNamespace(_nodeResolve_empty$1);var seedrandom$1=createCommonjsModule(function(module){(function(global,pool,math){var width=256,chunks=6,digits=52,rngname="random",startdenom=math.pow(width,chunks),significance=math.pow(2,digits),overflow=significance*2,mask=width-1,nodecrypto;function seedrandom(seed,options,callback){var key=[];options=options==true?{entropy:true}:options||{};var shortseed=mixkey(flatten(options.entropy?[seed,tostring(pool)]:seed==null?autoseed():seed,3),key);var arc4=new ARC4(key);var prng=function(){var n=arc4.g(chunks),d=startdenom,x=0;while(n<significance){n=(n+x)*width;d*=width;x=arc4.g(1)}while(n>=overflow){n/=2;d/=2;x>>>=1}return(n+x)/d};prng.int32=function(){return arc4.g(4)|0};prng.quick=function(){return arc4.g(4)/4294967296};prng.double=prng;mixkey(tostring(arc4.S),pool);return(options.pass||callback||function(prng,seed,is_math_call,state){if(state){if(state.S){copy(state,arc4)}prng.state=function(){return copy(arc4,{})}}if(is_math_call){math[rngname]=prng;return seed}else return prng})(prng,shortseed,"global"in options?options.global:this==math,options.state)}function ARC4(key){var t,keylen=key.length,me=this,i=0,j=me.i=me.j=0,s=me.S=[];if(!keylen){key=[keylen++]}while(i<width){s[i]=i++}for(i=0;i<width;i++){s[i]=s[j=mask&j+key[i%keylen]+(t=s[i])];s[j]=t}(me.g=function(count){var t,r=0,i=me.i,j=me.j,s=me.S;while(count--){t=s[i=mask&i+1];r=r*width+s[mask&(s[i]=s[j=mask&j+t])+(s[j]=t)]}me.i=i;me.j=j;return r})(width)}function copy(f,t){t.i=f.i;t.j=f.j;t.S=f.S.slice();return t}function flatten(obj,depth){var result=[],typ=typeof obj,prop;if(depth&&typ=="object"){for(prop in obj){try{result.push(flatten(obj[prop],depth-1))}catch(e){}}}return result.length?result:typ=="string"?obj:obj+"\0"}function mixkey(seed,key){var stringseed=seed+"",smear,j=0;while(j<stringseed.length){key[mask&j]=mask&(smear^=key[mask&j]*19)+stringseed.charCodeAt(j++)}return tostring(key)}function autoseed(){try{var out;if(nodecrypto&&(out=nodecrypto.randomBytes)){out=out(width)}else{out=new Uint8Array(width);(global.crypto||global.msCrypto).getRandomValues(out)}return tostring(out)}catch(e){var browser=global.navigator,plugins=browser&&browser.plugins;return[+new Date,global,plugins,global.screen,tostring(pool)]}}function tostring(a){return String.fromCharCode.apply(0,a)}mixkey(math.random(),pool);if(module.exports){module.exports=seedrandom;try{nodecrypto=require$$0}catch(ex){}}else{math["seed"+rngname]=seedrandom}})(typeof self!=="undefined"?self:commonjsGlobal,[],Math)});seedrandom$1.alea=alea;seedrandom$1.xor128=xor128;seedrandom$1.xorwow=xorwow;seedrandom$1.xorshift7=xorshift7;seedrandom$1.xor4096=xor4096;seedrandom$1.tychei=tychei;var seedrandom=seedrandom$1;var MPRandGauss=function(){function MPRandGauss(mean,stdDeviation,dtype,truncated,seed){this.mean=mean;this.stdDev=stdDeviation;this.dtype=dtype;this.nextVal=NaN;this.truncated=truncated;if(this.truncated){this.upper=this.mean+this.stdDev*2;this.lower=this.mean-this.stdDev*2}var seedValue=seed?seed:Math.random();this.random=seedrandom.alea(seedValue.toString())}MPRandGauss.prototype.nextValue=function(){if(!isNaN(this.nextVal)){var value=this.nextVal;this.nextVal=NaN;return value}var resultX,resultY;var isValid=false;while(!isValid){var v1=void 0,v2=void 0,s=void 0;do{v1=2*this.random()-1;v2=2*this.random()-1;s=v1*v1+v2*v2}while(s>=1||s===0);var mul=Math.sqrt(-2*Math.log(s)/s);resultX=this.mean+this.stdDev*v1*mul;resultY=this.mean+this.stdDev*v2*mul;if(!this.truncated||this.isValidTruncated(resultX)){isValid=true}}if(!this.truncated||this.isValidTruncated(resultY)){this.nextVal=this.convertValue(resultY)}return this.convertValue(resultX)};MPRandGauss.prototype.convertValue=function(value){if(this.dtype==null||this.dtype==="float32"){return value}return Math.round(value)};MPRandGauss.prototype.isValidTruncated=function(value){return value<=this.upper&&value>=this.lower};return MPRandGauss}();var RandGamma=function(){function RandGamma(alpha,beta,dtype,seed){this.alpha=alpha;this.beta=1/beta;this.dtype=dtype;var seedValue=seed?seed:Math.random();this.randu=seedrandom.alea(seedValue.toString());this.randn=new MPRandGauss(0,1,dtype,false,this.randu());if(alpha<1){this.d=alpha+2/3}else{this.d=alpha-1/3}this.c=1/Math.sqrt(9*this.d)}RandGamma.prototype.nextValue=function(){var x2,v0,v1,x,u,v;while(true){do{x=this.randn.nextValue();v=1+this.c*x}while(v<=0);v*=v*v;x2=x*x;v0=1-.331*x2*x2;v1=.5*x2+this.d*(1-v+Math.log(v));u=this.randu();if(u<v0||Math.log(u)<v1){break}}v=1/this.beta*this.d*v;if(this.alpha<1){v*=Math.pow(this.randu(),1/this.alpha)}return this.convertValue(v)};RandGamma.prototype.convertValue=function(value){if(this.dtype==="float32"){return value}return Math.round(value)};return RandGamma}();var UniformRandom=function(){function UniformRandom(min,max,dtype,seed){var _this=this;if(min===void 0){min=0}if(max===void 0){max=1}this.canReturnFloat=function(){return _this.dtype==null||_this.dtype==="float32"};this.min=min;this.range=max-min;this.dtype=dtype;if(seed==null){seed=Math.random()}if(typeof seed==="number"){seed=seed.toString()}if(!this.canReturnFloat()&&this.range<=1){throw new Error("The difference between "+min+" - "+max+" <= 1 and dtype is not float")}this.random=seedrandom.alea(seed)}UniformRandom.prototype.convertValue=function(value){if(this.canReturnFloat()){return value}return Math.round(value)};UniformRandom.prototype.nextValue=function(){return this.convertValue(this.min+this.range*this.random())};return UniformRandom}();function randomGamma_(shape,alpha,beta,dtype,seed){if(beta===void 0){beta=1}if(dtype===void 0){dtype="float32"}if(beta==null){beta=1}if(dtype==null){dtype="float32"}if(dtype!=="float32"&&dtype!=="int32"){throw new Error("Unsupported data type "+dtype)}var rgamma=new RandGamma(alpha,beta,dtype,seed);var res=buffer(shape,dtype);for(var i=0;i<res.values.length;i++){res.values[i]=rgamma.nextValue()}return res.toTensor()}var randomGamma=op({randomGamma_:randomGamma_});function randomNormal_(shape,mean,stdDev,dtype,seed){if(mean===void 0){mean=0}if(stdDev===void 0){stdDev=1}if(dtype!=null&&dtype==="bool"){throw new Error("Unsupported data type "+dtype)}var randGauss=new MPRandGauss(mean,stdDev,dtype,false,seed);var res=buffer(shape,dtype);for(var i=0;i<res.values.length;i++){res.values[i]=randGauss.nextValue()}return res.toTensor()}var randomNormal=op({randomNormal_:randomNormal_});function randomUniform_(shape,minval,maxval,dtype,seed){if(minval===void 0){minval=0}if(maxval===void 0){maxval=1}if(dtype===void 0){dtype="float32"}var res=buffer(shape,dtype);var random=new UniformRandom(minval,maxval,null,seed);for(var i=0;i<res.values.length;i++){res.values[i]=random.nextValue()}return res.toTensor()}var randomUniform=op({randomUniform_:randomUniform_});function range(start,stop,step,dtype){if(step===void 0){step=1}if(dtype===void 0){dtype="float32"}if(step===0){throw new Error("Cannot have a step of zero")}var attrs={start:start,stop:stop,step:step,dtype:dtype};return ENGINE.runKernel(Range,{},attrs)}function real_(input){var $input=convertToTensor(input,"input","real");var inputs={input:$input};return ENGINE.runKernel(Real,inputs)}var real=op({real_:real_});function reciprocal_(x){var $x=convertToTensor(x,"x","reciprocal");var inputs={x:$x};return ENGINE.runKernel(Reciprocal,inputs)}var reciprocal=op({reciprocal_:reciprocal_});function relu_(x){var $x=convertToTensor(x,"x","relu");var inputs={x:$x};return ENGINE.runKernel(Relu,inputs)}var relu=op({relu_:relu_});function relu6_(x){var $x=convertToTensor(x,"x","relu6");var inputs={x:$x};return ENGINE.runKernel(Relu6,inputs)}var relu6=op({relu6_:relu6_});function reverse_(x,axis){var $x=convertToTensor(x,"x","reverse");var inputs={x:$x};var attrs={dims:axis};return ENGINE.runKernel(Reverse,inputs,attrs)}var reverse=op({reverse_:reverse_});function reverse1d_(x){var $x=convertToTensor(x,"x","reverse");assert($x.rank===1,function(){return"Error in reverse1D: x must be rank 1 but got rank "+$x.rank+"."});return reverse($x,0)}var reverse1d=op({reverse1d_:reverse1d_});function reverse2d_(x,axis){var $x=convertToTensor(x,"x","reverse");assert($x.rank===2,function(){return"Error in reverse2D: x must be rank 2 but got rank "+$x.rank+"."});return reverse($x,axis)}var reverse2d=op({reverse2d_:reverse2d_});function reverse3d_(x,axis){var $x=convertToTensor(x,"x","reverse");assert($x.rank===3,function(){return"Error in reverse3D: x must be rank 3 but got rank "+$x.rank+"."});return reverse($x,axis)}var reverse3d=op({reverse3d_:reverse3d_});function reverse4d_(x,axis){var $x=convertToTensor(x,"x","reverse");assert($x.rank===4,function(){return"Error in reverse4D: x must be rank 4 but got rank "+$x.rank+"."});return reverse($x,axis)}var reverse4d=op({reverse4d_:reverse4d_});function round_(x){var $x=convertToTensor(x,"x","round");var inputs={x:$x};return ENGINE.runKernel(Round,inputs)}var round=op({round_:round_});function rsqrt_(x){var $x=convertToTensor(x,"x","rsqrt","float32");var inputs={x:$x};return ENGINE.runKernel(Rsqrt,inputs)}var rsqrt=op({rsqrt_:rsqrt_});function makeTensor(values,shape,inferredShape,dtype){if(dtype==null){dtype=inferDtype(values)}if(dtype==="complex64"){throw new Error("Cannot construct a complex64 tensor directly. "+"Please use tf.complex(real, imag).")}if(!isTypedArray(values)&&!Array.isArray(values)&&typeof values!=="number"&&typeof values!=="boolean"&&typeof values!=="string"){throw new Error("values passed to tensor(values) must be a number/boolean/string or "+"an array of numbers/booleans/strings, or a TypedArray")}if(shape!=null){assertNonNegativeIntegerDimensions(shape);var providedSize_1=sizeFromShape(shape);var inferredSize_1=sizeFromShape(inferredShape);assert(providedSize_1===inferredSize_1,function(){return"Based on the provided shape, ["+shape+"], the tensor should have "+(providedSize_1+" values but has "+inferredSize_1)});for(var i=0;i<inferredShape.length;++i){var inferred=inferredShape[i];var flatDimsDontMatch=i===inferredShape.length-1?inferred!==sizeFromShape(shape.slice(i)):true;assert(inferredShape[i]===shape[i]||!flatDimsDontMatch,function(){return"Error creating a new Tensor. Inferred shape "+("("+inferredShape+") does not match the provided ")+("shape ("+shape+"). ")})}}if(!isTypedArray(values)&&!Array.isArray(values)){values=[values]}shape=shape||inferredShape;values=dtype!=="string"?toTypedArray(values,dtype):flatten(values,[],true);return ENGINE.makeTensor(values,shape,dtype)}function scalar(value,dtype){if((isTypedArray(value)&&dtype!=="string"||Array.isArray(value))&&dtype!=="complex64"){throw new Error("Error creating a new Scalar: value must be a primitive "+"(number|boolean|string)")}if(dtype==="string"&&isTypedArray(value)&&!(value instanceof Uint8Array)){throw new Error("When making a scalar from encoded string, "+"the value must be `Uint8Array`.")}var shape=[];var inferredShape=[];return makeTensor(value,shape,inferredShape,dtype)}function selu_(x){var $x=convertToTensor(x,"x","selu");var inputs={x:$x};return ENGINE.runKernel(Selu,inputs)}var selu=op({selu_:selu_});function separableConv2d_(x,depthwiseFilter,pointwiseFilter,strides,pad,dilation,dataFormat){if(dilation===void 0){dilation=[1,1]}if(dataFormat===void 0){dataFormat="NHWC"}var $x=convertToTensor(x,"x","separableConv2d");var $depthwiseFilter=convertToTensor(depthwiseFilter,"depthwiseFilter","separableConv2d");var $pointwiseFilter=convertToTensor(pointwiseFilter,"pointwiseFilter","separableConv2d");var x4D=$x;var reshapedTo4D=false;if($x.rank===3){reshapedTo4D=true;x4D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2]])}if(dataFormat==="NCHW"){throw new Error("separableConv2d currently does not support dataFormat NCHW; only "+"NHWC is supported")}assert(x4D.rank===4,function(){return"Error in separableConv2d: input must be rank 4, but got "+("rank "+x4D.rank+".")});assert($depthwiseFilter.rank===4,function(){return"Error in separableConv2d: depthwise filter must be rank 4, but "+("got rank "+$depthwiseFilter.rank+".")});assert($pointwiseFilter.rank===4,function(){return"Error in separableConv2d: pointwise filter must be rank 4, but "+("got rank "+$depthwiseFilter.rank+".")});assert($pointwiseFilter.shape[0]===1,function(){return"Error in separableConv2d: the first dimension of pointwise filter "+(" must be 1, but got "+$pointwiseFilter.shape[0]+".")});assert($pointwiseFilter.shape[1]===1,function(){return"Error in separableConv2d: the second dimension of pointwise "+("filter must be 1, but got "+$pointwiseFilter.shape[1]+".")});var inChannels=$depthwiseFilter.shape[2];var channelMultiplier=$depthwiseFilter.shape[3];assert($pointwiseFilter.shape[2]===inChannels*channelMultiplier,function(){return"Error in separableConv2d: the third dimension of pointwise filter "+("must be "+inChannels*channelMultiplier+", ")+("but got "+$pointwiseFilter.shape[2]+".")});var depthwise=depthwiseConv2d$1(x4D,$depthwiseFilter,strides,pad,dataFormat,dilation);var pointwiseStride=1;var res=conv2d$1(depthwise,$pointwiseFilter,pointwiseStride,"valid",dataFormat);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return res}var separableConv2d=op({separableConv2d_:separableConv2d_});function setdiff1dAsync_(x,y){return __awaiter(this,void 0,void 0,function(){var $x,$y,xVals,yVals,ySet,outputSize,i,buffer,indices,i,p;return __generator(this,function(_a){switch(_a.label){case 0:$x=convertToTensor(x,"x","setdiff1d");$y=convertToTensor(y,"y","setdiff1d");assert($x.dtype===$y.dtype,function(){return"x and y should have the same dtype, but got x ("+$x.dtype+") and y ("+$y.dtype+")."});assert($x.rank===1,function(){return"x should be 1D tensor, but got x ("+$x.shape+")."});assert($y.rank===1,function(){return"y should be 1D tensor, but got y ("+$y.shape+")."});return[4,$x.data()];case 1:xVals=_a.sent();return[4,$y.data()];case 2:yVals=_a.sent();ySet=new Set(yVals);outputSize=0;for(i=0;i<xVals.length;i++){if(!ySet.has(xVals[i])){outputSize++}}buffer=new TensorBuffer([outputSize],$x.dtype);indices=new TensorBuffer([outputSize],"int32");for(i=0,p=0;i<xVals.length;i++){if(!ySet.has(xVals[i])){buffer.values[p]=xVals[i];indices.values[p]=i;p++}}return[2,[buffer.toTensor(),indices.toTensor()]]}})})}var setdiff1dAsync=setdiff1dAsync_;function sign_(x){var $x=convertToTensor(x,"x","sign");var inputs={x:$x};return ENGINE.runKernel(Sign,inputs)}var sign=op({sign_:sign_});function sin_(x){var $x=convertToTensor(x,"x","sin","float32");var inputs={x:$x};return ENGINE.runKernel(Sin,inputs)}var sin=op({sin_:sin_});function sinh_(x){var $x=convertToTensor(x,"x","sinh");var inputs={x:$x};return ENGINE.runKernel(Sinh,inputs)}var sinh=op({sinh_:sinh_});function slice1d_(x,begin,size){var $x=convertToTensor(x,"x","slice1d");assert($x.rank===1,function(){return"slice1d expects a rank-1 tensor, but got a rank-"+$x.rank+" tensor"});return slice($x,[begin],[size])}var slice1d=op({slice1d_:slice1d_});function slice2d_(x,begin,size){var $x=convertToTensor(x,"x","slice2d");assert($x.rank===2,function(){return"slice2d expects a rank-2 tensor, but got a rank-"+$x.rank+" tensor"});return slice($x,begin,size)}var slice2d=op({slice2d_:slice2d_});function slice3d_(x,begin,size){var $x=convertToTensor(x,"x","slice3d");assert($x.rank===3,function(){return"slice3d expects a rank-3 tensor, but got a rank-"+$x.rank+" tensor"});return slice($x,begin,size)}var slice3d=op({slice3d_:slice3d_});function slice4d_(x,begin,size){var $x=convertToTensor(x,"x","slice4d");assert($x.rank===4,function(){return"slice4d expects a rank-4 tensor, but got a rank-"+$x.rank+" tensor"});return slice($x,begin,size)}var slice4d=op({slice4d_:slice4d_});function softmax_(logits,dim){if(dim===void 0){dim=-1}var $logits=convertToTensor(logits,"logits","softmax","float32");if(dim===-1){dim=$logits.rank-1}if(dim!==$logits.rank-1){throw Error("Softmax along a non-last dimension is not yet supported. "+("Logits was rank "+$logits.rank+" and dim was "+dim))}var inputs={logits:$logits};var attrs={dim:dim};return ENGINE.runKernel(Softmax,inputs,attrs)}var softmax=op({softmax_:softmax_});function fft_(input){assert(input.dtype==="complex64",function(){return"The dtype for tf.spectral.fft() must be complex64 "+("but got "+input.dtype+".")});var inputs={input:input};return ENGINE.runKernel(FFT,inputs)}var fft=op({fft_:fft_});function ifft_(input){assert(input.dtype==="complex64",function(){return"The dtype for tf.spectral.ifft() must be complex64 "+("but got "+input.dtype+".")});var inputs={input:input};return ENGINE.runKernel(IFFT,inputs)}var ifft=op({ifft_:ifft_});function irfft_(input){var innerDimensionSize=input.shape[input.shape.length-1];var batch=input.size/innerDimensionSize;var ret;if(innerDimensionSize<=2){var complexInput=reshape(input,[batch,innerDimensionSize]);ret=ifft(complexInput)}else{var outputShape=[batch,2*(innerDimensionSize-1)];var realInput=reshape(real(input),[batch,innerDimensionSize]);var imagInput=reshape(imag(input),[batch,innerDimensionSize]);var realConjugate=reverse(slice(realInput,[0,1],[batch,innerDimensionSize-2]),1);var imagConjugate=mul(reverse(slice(imagInput,[0,1],[batch,innerDimensionSize-2]),1),scalar(-1));var r=concat([realInput,realConjugate],1);var i=concat([imagInput,imagConjugate],1);var complexInput=reshape(complex(r,i),[outputShape[0],outputShape[1]]);ret=ifft(complexInput)}ret=real(ret);if(input.rank===3&&input.shape[0]!==0){var temp=ret;var batch_1=input.shape[0];ret=reshape(ret,[batch_1,ret.shape[0]/batch_1,ret.shape[1]]);temp.dispose()}return ret}var irfft=op({irfft_:irfft_});function split_(x,numOrSizeSplits,axis){if(axis===void 0){axis=0}var $x=convertToTensor(x,"x","split");var inputs={x:$x};var attr={numOrSizeSplits:numOrSizeSplits,axis:axis};return ENGINE.runKernel(SplitV,inputs,attr)}var split$1=op({split_:split_});function rfft_(input,fftLength){assert(input.dtype==="float32",function(){return"The dtype for rfft() must be real value but got "+input.dtype});var innerDimensionSize=input.shape[input.shape.length-1];var batch=input.size/innerDimensionSize;var adjustedInput;if(fftLength!=null&&fftLength<innerDimensionSize){var begin=input.shape.map(function(v){return 0});var size=input.shape.map(function(v){return v});size[input.shape.length-1]=fftLength;adjustedInput=slice(input,begin,size);innerDimensionSize=fftLength}else if(fftLength!=null&&fftLength>innerDimensionSize){var zerosShape=input.shape.map(function(v){return v});zerosShape[input.shape.length-1]=fftLength-innerDimensionSize;adjustedInput=concat([input,zeros(zerosShape)],input.shape.length-1);innerDimensionSize=fftLength}else{adjustedInput=input}var zerosInput=zerosLike(adjustedInput);var complexInput=reshape(complex(adjustedInput,zerosInput),[batch,innerDimensionSize]);var ret=fft(complexInput);var half=Math.floor(innerDimensionSize/2)+1;var realValues=real(ret);var imagValues=imag(ret);var realComplexConjugate=split$1(realValues,[half,innerDimensionSize-half],realValues.shape.length-1);var imagComplexConjugate=split$1(imagValues,[half,innerDimensionSize-half],imagValues.shape.length-1);var outputShape=adjustedInput.shape.slice();outputShape[adjustedInput.shape.length-1]=half;return reshape(complex(realComplexConjugate[0],imagComplexConjugate[0]),outputShape)}var rfft=op({rfft_:rfft_});function sqrt_(x){var $x=convertToTensor(x,"x","sqrt","float32");var inputs={x:$x};return ENGINE.runKernel(Sqrt,inputs)}var sqrt=op({sqrt_:sqrt_});function squaredDifference_(a,b){var _a;var $a=convertToTensor(a,"a","squaredDifference");var $b=convertToTensor(b,"b","squaredDifference");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];assertAndGetBroadcastShape($a.shape,$b.shape);var inputs={a:$a,b:$b};var attrs={};return ENGINE.runKernel(SquaredDifference,inputs,attrs)}var squaredDifference=op({squaredDifference_:squaredDifference_});function squeeze_(x,axis){var $x=convertToTensor(x,"x","squeeze");return reshape($x,squeezeShape($x.shape,axis).newShape)}var squeeze=op({squeeze_:squeeze_});function stack_(tensors,axis){if(axis===void 0){axis=0}var $tensors=convertToTensorArray(tensors,"tensors","stack","string_or_numeric");assert($tensors.length>=1,function(){return"Pass at least one tensor to tf.stack"});if($tensors.length>0){assert(axis<=$tensors[0].rank,function(){return"Axis must be <= rank of the tensor"})}var inputs=$tensors;var attrs={axis:axis};return ENGINE.runKernel(Pack,inputs,attrs)}var stack=op({stack_:stack_});function step_(x,alpha){if(alpha===void 0){alpha=0}var $x=convertToTensor(x,"x","step");var inputs={x:$x};var attrs={alpha:alpha};return ENGINE.runKernel(Step,inputs,attrs)}var step=op({step_:step_});function stridedSlice_(x,begin,end,strides,beginMask,endMask,ellipsisMask,newAxisMask,shrinkAxisMask){if(beginMask===void 0){beginMask=0}if(endMask===void 0){endMask=0}if(ellipsisMask===void 0){ellipsisMask=0}if(newAxisMask===void 0){newAxisMask=0}if(shrinkAxisMask===void 0){shrinkAxisMask=0}var $x=convertToTensor(x,"x","stridedSlice","string_or_numeric");var inputs={x:$x};var attrs={begin:begin,end:end,strides:strides,beginMask:beginMask,endMask:endMask,ellipsisMask:ellipsisMask,newAxisMask:newAxisMask,shrinkAxisMask:shrinkAxisMask};return ENGINE.runKernel(StridedSlice,inputs,attrs)}var stridedSlice=op({stridedSlice_:stridedSlice_});function tan_(x){var $x=convertToTensor(x,"x","tan","float32");var inputs={x:$x};return ENGINE.runKernel(Tan,inputs)}var tan=op({tan_:tan_});function tensor(values,shape,dtype){var inferredShape=inferShape(values,dtype);return makeTensor(values,shape,inferredShape,dtype)}function tensor1d(values,dtype){assertNonNull(values);var inferredShape=inferShape(values,dtype);if(inferredShape.length!==1){throw new Error("tensor1d() requires values to be a flat/TypedArray")}var shape=null;return makeTensor(values,shape,inferredShape,dtype)}function tensor2d(values,shape,dtype){assertNonNull(values);if(shape!=null&&shape.length!==2){throw new Error("tensor2d() requires shape to have two numbers")}var inferredShape=inferShape(values,dtype);if(inferredShape.length!==2&&inferredShape.length!==1){throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray")}if(inferredShape.length===1&&shape==null){throw new Error("tensor2d() requires shape to be provided when `values` "+"are a flat/TypedArray")}return makeTensor(values,shape,inferredShape,dtype)}function tensor3d(values,shape,dtype){assertNonNull(values);if(shape!=null&&shape.length!==3){throw new Error("tensor3d() requires shape to have three numbers")}var inferredShape=inferShape(values,dtype);if(inferredShape.length!==3&&inferredShape.length!==1){throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray")}if(inferredShape.length===1&&shape==null){throw new Error("tensor3d() requires shape to be provided when `values` "+"are a flat array")}return makeTensor(values,shape,inferredShape,dtype)}function tensor4d(values,shape,dtype){assertNonNull(values);if(shape!=null&&shape.length!==4){throw new Error("tensor4d() requires shape to have four numbers")}var inferredShape=inferShape(values,dtype);if(inferredShape.length!==4&&inferredShape.length!==1){throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray")}if(inferredShape.length===1&&shape==null){throw new Error("tensor4d() requires shape to be provided when `values` "+"are a flat array")}return makeTensor(values,shape,inferredShape,dtype)}function tensor5d(values,shape,dtype){assertNonNull(values);if(shape!=null&&shape.length!==5){throw new Error("tensor5d() requires shape to have five numbers")}var inferredShape=inferShape(values,dtype);if(inferredShape.length!==5&&inferredShape.length!==1){throw new Error("tensor5d() requires values to be "+"number[][][][][] or flat/TypedArray")}if(inferredShape.length===1&&shape==null){throw new Error("tensor5d() requires shape to be provided when `values` "+"are a flat array")}return makeTensor(values,shape,inferredShape,dtype)}function tensor6d(values,shape,dtype){assertNonNull(values);if(shape!=null&&shape.length!==6){throw new Error("tensor6d() requires shape to have six numbers")}var inferredShape=inferShape(values,dtype);if(inferredShape.length!==6&&inferredShape.length!==1){throw new Error("tensor6d() requires values to be number[][][][][][] or "+"flat/TypedArray")}if(inferredShape.length===1&&shape==null){throw new Error("tensor6d() requires shape to be provided when `values` "+"are a flat array")}shape=shape||inferredShape;return makeTensor(values,shape,inferredShape,dtype)}function topk_(x,k,sorted){if(k===void 0){k=1}if(sorted===void 0){sorted=true}var $x=convertToTensor(x,"x","topk");if($x.rank===0){throw new Error("topk() expects the input to be of rank 1 or higher")}var lastDim=$x.shape[$x.shape.length-1];if(k<0){throw new Error("'k' passed to topk() must be >= 0 but got "+k)}if(k>lastDim){throw new Error("'k' passed to topk() must be <= the last dimension ("+lastDim+") "+("but got "+k))}var inputs={x:$x};var attrs={k:k,sorted:sorted};var _a=__read(ENGINE.runKernel(TopK,inputs,attrs),2),values=_a[0],indices=_a[1];return{values:values,indices:indices}}var topk=op({topk_:topk_});function truncatedNormal_(shape,mean,stdDev,dtype,seed){if(mean===void 0){mean=0}if(stdDev===void 0){stdDev=1}if(dtype!=null&&dtype==="bool"){throw new Error("Unsupported data type $ { dtype }")}var randGauss=new MPRandGauss(mean,stdDev,dtype,true,seed);var res=buffer(shape,dtype);for(var i=0;i<res.values.length;i++){res.values[i]=randGauss.nextValue()}return res.toTensor()}var truncatedNormal=op({truncatedNormal_:truncatedNormal_});function unique_(x,axis){if(axis===void 0){axis=0}var $x=convertToTensor(x,"x","unique","string_or_numeric");assert($x.rank>0,function(){return"The input tensor must be at least 1D"});var inputs={x:$x};var attrs={axis:axis};var _a=__read(ENGINE.runKernel(Unique,inputs,attrs),2),values=_a[0],indices=_a[1];return{values:values,indices:indices}}var unique=op({unique_:unique_});function unsortedSegmentSum_(x,segmentIds,numSegments){var $x=convertToTensor(x,"x","unsortedSegmentSum");var $segmentIds=convertToTensor(segmentIds,"segmentIds","unsortedSegmentSum","int32");assert(isInt(numSegments),function(){return"numSegments must be of dtype int"});var inputs={x:$x,segmentIds:$segmentIds};var attrs={numSegments:numSegments};return ENGINE.runKernel(UnsortedSegmentSum,inputs,attrs)}var unsortedSegmentSum=op({unsortedSegmentSum_:unsortedSegmentSum_});function unstack_(x,axis){if(axis===void 0){axis=0}var $x=convertToTensor(x,"x","unstack","string_or_numeric");assert(axis>=-$x.shape.length&&axis<$x.shape.length,function(){return"Axis = "+axis+" is not in [-"+$x.shape.length+", "+$x.shape.length+")"});var inputs={value:$x};var attrs={axis:axis};return ENGINE.runKernel(Unpack,inputs,attrs)}var unstack=op({unstack_:unstack_});function variable(initialValue,trainable,name,dtype){if(trainable===void 0){trainable=true}return ENGINE.makeVariable(initialValue,trainable,name,dtype)}function whereImpl(condShape,condVals){var indices=[];for(var i=0;i<condVals.length;i++){if(condVals[i]){indices.push(i)}}var inBuffer=buffer(condShape,"int32");var out=buffer([indices.length,condShape.length],"int32");for(var i=0;i<indices.length;i++){var loc=inBuffer.indexToLoc(indices[i]);var offset=i*condShape.length;out.values.set(loc,offset)}return out.toTensor()}function whereAsync_(condition){return __awaiter(this,void 0,void 0,function(){var $condition,vals,res;return __generator(this,function(_a){switch(_a.label){case 0:$condition=convertToTensor(condition,"condition","whereAsync","bool");return[4,$condition.data()];case 1:vals=_a.sent();res=whereImpl($condition.shape,vals);if(condition!==$condition){$condition.dispose()}return[2,res]}})})}var whereAsync=whereAsync_;function booleanMaskAsync_(tensor,mask,axis){return __awaiter(this,void 0,void 0,function(){var $tensor,$mask,axisFrom,maskDim,tensorShape,leadingSize,i,targetTensorShape,reshapedTensor,reshapedMask,positivePositions,indices,res;return __generator(this,function(_a){switch(_a.label){case 0:$tensor=convertToTensor(tensor,"tensor","boolMask");$mask=convertToTensor(mask,"mask","boolMask","bool");axisFrom=axis==null?0:axis;maskDim=$mask.rank;tensorShape=$tensor.shape;assert(maskDim>0,function(){return"mask cannot be scalar"});assertShapesMatch(tensorShape.slice(axisFrom,axisFrom+maskDim),$mask.shape,"mask's shape must match the first K dimensions of tensor's shape,");leadingSize=1;for(i=axisFrom;i<axisFrom+maskDim;i++){leadingSize*=tensorShape[i]}targetTensorShape=tensorShape.slice(0,axisFrom).concat([leadingSize],tensorShape.slice(axisFrom+maskDim));reshapedTensor=reshape($tensor,targetTensorShape);reshapedMask=reshape($mask,[-1]);return[4,whereAsync(reshapedMask)];case 1:positivePositions=_a.sent();indices=squeeze(positivePositions,[1]);res=gather(reshapedTensor,indices,axisFrom);if(tensor!==$tensor){$tensor.dispose()}if(mask!==$mask){$mask.dispose()}indices.dispose();reshapedTensor.dispose();reshapedMask.dispose();positivePositions.dispose();return[2,res]}})})}var booleanMaskAsync=booleanMaskAsync_;function transpose_(x,perm){var $x=convertToTensor(x,"x","transpose");if(perm==null){perm=$x.shape.map(function(s,i){return i}).reverse()}assert($x.rank===perm.length,function(){return"Error in transpose: rank of input "+$x.rank+" "+("must match length of perm "+perm+".")});perm.forEach(function(axis){assert(axis>=0&&axis<$x.rank,function(){return"All entries in 'perm' must be between 0 and "+($x.rank-1)+(" but got "+perm)})});if($x.rank<=1){return $x.clone()}var inputs={x:$x};var attrs={perm:perm};return ENGINE.runKernel(Transpose,inputs,attrs)}var transpose=op({transpose_:transpose_});function norm_(x,ord,axis,keepDims){if(ord===void 0){ord="euclidean"}if(axis===void 0){axis=null}if(keepDims===void 0){keepDims=false}x=convertToTensor(x,"x","norm");var norm=normImpl(x,ord,axis);var keepDimsShape=norm.shape;if(keepDims){var axes=parseAxisParam(axis,x.shape);keepDimsShape=expandShapeToKeepDim(norm.shape,axes)}return reshape(norm,keepDimsShape)}function normImpl(x,p,axis){if(axis===void 0){axis=null}if(x.rank===0){return abs(x)}if(x.rank!==1&&axis===null){return normImpl(reshape(x,[-1]),p,axis)}if(x.rank===1||typeof axis==="number"||Array.isArray(axis)&&axis.length===1){if(p===1){return sum(abs(x),axis)}if(p===Infinity){return max(abs(x),axis)}if(p===-Infinity){return min(abs(x),axis)}if(p==="euclidean"||p===2){return sqrt(sum(pow(abs(x),scalar(2,"int32")),axis))}throw new Error("Error in norm: invalid ord value: "+p)}if(Array.isArray(axis)&&axis.length===2){if(p===1){return max(sum(abs(x),axis[0]),axis[1]-1)}if(p===Infinity){return max(sum(abs(x),axis[1]),axis[0])}if(p===-Infinity){return min(sum(abs(x),axis[1]),axis[0])}if(p==="fro"||p==="euclidean"){return sqrt(sum(square(x),axis))}throw new Error("Error in norm: invalid ord value: "+p)}throw new Error("Error in norm: invalid axis: "+axis)}var norm=op({norm_:norm_});function movingAverage_(v,x,decay,step,zeroDebias){if(zeroDebias===void 0){zeroDebias=true}var $v=convertToTensor(v,"v","movingAverage");var $x=convertToTensor(x,"x","movingAverage");var $decay=convertToTensor(decay,"decay","movingAverage");assertTypesMatch($v,$x);assert(arraysEqual($v.shape,$x.shape),function(){return"Shape mismatch in v and x"});var one=scalar(1);var oneMinusDecay=sub(one,$decay);var update=mul(sub($x,$v),oneMinusDecay);if(zeroDebias){assert(step!=null,function(){return"When using zeroDebias: true, step is required."});var $step=convertToTensor(step,"step","movingAverage");update=div(update,sub(one,pow($decay,$step)))}return add($v,update)}var movingAverage=op({movingAverage_:movingAverage_});function validateUpdateShape(shape,indices,updates){var sliceDim=indices.rank>1?indices.shape[indices.rank-1]:1;var batchDim=indices.rank>1?indices.rank-1:1;var shapeError="Must have updates.shape = indices.shape[:batchDim] + "+("shape[sliceDim:], got updates.shape: "+updates.shape)+(", indices.shape: "+indices.shape+", shape: "+shape)+(", sliceDim: "+sliceDim+", and batchDim: "+batchDim+".");if(updates.rank<batchDim){throw new Error(shapeError+(" update.rank < "+batchDim+". "))}if(shape.length<sliceDim+(updates.rank-batchDim)){throw new Error(shapeError+(" Output shape length < "+(sliceDim+(updates.rank-batchDim))))}if(updates.rank!==batchDim+shape.length-sliceDim){throw new Error(shapeError+(" update.rank != "+(batchDim+shape.length-sliceDim)))}for(var d=0;d<batchDim;++d){if(updates.shape[d]!==indices.shape[d]){throw new Error(shapeError+(" updates.shape["+d+"] ("+updates.shape[d]+") != indices.shape["+d+"] ("+indices.shape[d]+")."))}}for(var d=0;d<updates.rank-batchDim;++d){if(updates.shape[d+batchDim]!==shape[d+sliceDim]){throw new Error(shapeError+(" updates.shape["+(d+batchDim)+"] ("+updates.shape[d+batchDim]+") != shape["+(d+batchDim)+"] ("+shape[d+batchDim]+")"))}}}function validateInput$1(updates,indices,shape){if(indices.rank<1){throw new Error("tf.scatterND() expects the indices to be rank 1 or higher,"+(" but the rank was "+indices.rank+"."))}if(updates.rank<1){throw new Error("tf.scatterND() expects the updates to be rank 1 or higher,"+(" but the rank was "+updates.rank+"."))}if(indices.dtype!=="int32"){throw new Error("The dtype of 'indices' should be int32, but got dtype: "+indices.dtype)}if(shape.length<1){throw new Error("Output rank must be greater or equal to 1, but got shape: "+shape)}if(shape.length===0){if(indices.size===0){throw new Error("Indices specified for empty output. indices shape: "+indices.shape)}if(updates.size===0){throw new Error("Updates specified for empty output. updates shape: "+updates.shape)}}validateUpdateShape(shape,indices,updates)}function scatterND_(indices,updates,shape){var $indices=convertToTensor(indices,"indices","scatterND","int32");var $updates=convertToTensor(updates,"updates","scatterND");validateInput$1($updates,$indices,shape);var inputs={indices:$indices,updates:$updates};var attrs={shape:shape};return ENGINE.runKernel(ScatterNd,inputs,attrs)}var scatterND=op({scatterND_:scatterND_});function validateInput(sparseIndices,sparseValues,outputShape,defaultValues){if(sparseIndices.dtype!=="int32"){throw new Error("tf.sparseToDense() expects the indices to be int32 type,"+(" but the dtype was "+sparseIndices.dtype+"."))}if(sparseIndices.rank>2){throw new Error("sparseIndices should be a scalar, vector, or matrix,"+(" but got shape "+sparseIndices.shape+"."))}var numElems=sparseIndices.rank>0?sparseIndices.shape[0]:1;var numDims=sparseIndices.rank>1?sparseIndices.shape[1]:1;if(outputShape.length!==numDims){throw new Error("outputShape has incorrect number of elements:,"+(" "+outputShape.length+", should be: "+numDims+"."))}var numValues=sparseValues.size;if(!(sparseValues.rank===0||sparseValues.rank===1&&numValues===numElems)){throw new Error("sparseValues has incorrect shape "+(sparseValues.shape+", should be [] or ["+numElems+"]"))}if(sparseValues.dtype!==defaultValues.dtype){throw new Error("sparseValues.dtype must match defaultValues.dtype")}}function sparseToDense_(sparseIndices,sparseValues,outputShape,defaultValue){if(defaultValue===void 0){defaultValue=0}var $sparseIndices=convertToTensor(sparseIndices,"sparseIndices","sparseToDense","int32");var $sparseValues=convertToTensor(sparseValues,"sparseValues","sparseToDense");var $defaultValue=convertToTensor(defaultValue,"defaultValue","sparseToDense",$sparseValues.dtype);validateInput($sparseIndices,$sparseValues,outputShape,$defaultValue);var inputs={sparseIndices:$sparseIndices,sparseValues:$sparseValues,defaultValue:$defaultValue};var attrs={outputShape:outputShape};return ENGINE.runKernel(SparseToDense,inputs,attrs)}var sparseToDense=op({sparseToDense_:sparseToDense_});function gatherND_(x,indices){var $indices=convertToTensor(indices,"indices","gatherND","int32");var $x=convertToTensor(x,"x","gatherND","string_or_numeric");var inputs={params:$x,indices:$indices};return ENGINE.runKernel(GatherNd,inputs)}var gatherND=op({gatherND_:gatherND_});function getNoiseShape(x,noiseShape){if(noiseShape==null){return x.shape.slice()}if(arraysEqual(x.shape,noiseShape)){return noiseShape}if(x.shape.length===noiseShape.length){var newDimension=[];for(var i=0;i<x.shape.length;i++){if(noiseShape[i]==null&&x.shape[i]!=null){newDimension.push(x.shape[i])}else{newDimension.push(noiseShape[i])}}return newDimension}return noiseShape}function dropout_(x,rate,noiseShape,seed){var $x=convertToTensor(x,"x","dropout");assert($x.dtype==="float32",function(){return"x has to be a floating point tensor since it's going to be "+("scaled, but got a "+$x.dtype+" tensor instead.")});assert(rate>=0&&rate<1,function(){return"rate must be a float in the range [0, 1), but got "+rate+"."});if(rate===0){return x instanceof Tensor?$x.clone():$x}var $noiseShape=getNoiseShape($x,noiseShape);var keepProb=1-rate;var multiplier=div(floor(add(randomUniform($noiseShape,0,1,"float32",seed),keepProb)),keepProb);return mul($x,multiplier)}var dropout=op({dropout_:dropout_});function enclosingPowerOfTwo(value){return Math.floor(Math.pow(2,Math.ceil(Math.log(value)/Math.log(2))))}function cosineWindow(windowLength,a,b){var even=1-windowLength%2;var newValues=new Float32Array(windowLength);for(var i=0;i<windowLength;++i){var cosArg=2*Math.PI*i/(windowLength+even-1);newValues[i]=a-b*Math.cos(cosArg)}return tensor1d(newValues,"float32")}function inTopKAsync_(predictions,targets,k){if(k===void 0){k=1}return __awaiter(this,void 0,void 0,function(){var $predictions,$targets,lastDim,predictionsVals,targetsVals,_a,batch,size,precision,b,offset,vals,valAndInd,i,i;return __generator(this,function(_b){switch(_b.label){case 0:$predictions=convertToTensor(predictions,"predictions","inTopK");$targets=convertToTensor(targets,"targets","inTopK");assert($predictions.rank>1,function(){return"inTopK() expects the predictions to be of rank 2 or higher, "+("but got "+$predictions.rank)});assert($predictions.rank-1===$targets.rank,function(){return"predictions rank should be 1 larger than "+"targets rank, but got predictions rank "+($predictions.rank+" and targets rank "+$targets.rank)});assertShapesMatch($predictions.shape.slice(0,$predictions.shape.length-1),$targets.shape,"predictions's shape should be align with the targets' shape, "+"except the last dimension.");lastDim=$predictions.shape[$predictions.shape.length-1];assert(k>0&&k<=lastDim,function(){return"'k' passed to inTopK() must be > 0 && <= the predictions last "+("dimension ("+lastDim+"), but got "+k)});return[4,$predictions.data()];case 1:predictionsVals=_b.sent();return[4,$targets.data()];case 2:targetsVals=_b.sent();_a=__read([predictionsVals.length/lastDim,lastDim],2),batch=_a[0],size=_a[1];precision=getTypedArrayFromDType("bool",batch);for(b=0;b<batch;b++){offset=b*size;vals=predictionsVals.subarray(offset,offset+size);valAndInd=[];for(i=0;i<vals.length;i++){valAndInd.push({value:vals[i],index:i})}valAndInd.sort(function(a,b){return b.value-a.value});precision[b]=0;for(i=0;i<k;i++){if(valAndInd[i].index===targetsVals[b]){precision[b]=1;break}}}if(predictions!==$predictions){$predictions.dispose()}if(targets!==$targets){$targets.dispose()}return[2,tensor(precision,$targets.shape,"bool")]}})})}var inTopKAsync=inTopKAsync_;function conv2DBackpropFilter_(x,dy,filterShape,strides,pad,dataFormat,dimRoundingMode){if(dataFormat===void 0){dataFormat="NHWC"}var x4D=x;if(x.rank===3){x4D=reshape(x,[1,x.shape[0],x.shape[1],x.shape[2]])}var dy4D=dy;if(dy4D.rank===3){dy4D=reshape(dy,[1,dy.shape[0],dy.shape[1],dy.shape[2]])}assert(x4D.rank===4,function(){return"Error in conv2dDerFilter: input must be rank 4, but got shape "+(x4D.shape+".")});assert(dy4D.rank===4,function(){return"Error in conv2dDerFilter: dy must be rank 4, but got shape "+(dy4D.shape+".")});assert(filterShape.length===4,function(){return"Error in conv2dDerFilter: filterShape must be length 4, but got "+(filterShape+".")});var inDepth=dataFormat==="NHWC"?x4D.shape[3]:x4D.shape[1];var outDepth=dataFormat==="NHWC"?dy4D.shape[3]:dy4D.shape[1];assert(inDepth===filterShape[2],function(){return"Error in conv2dDerFilter: depth of input "+inDepth+") must "+("match input depth in filter ("+filterShape[2]+".")});assert(outDepth===filterShape[3],function(){return"Error in conv2dDerFilter: depth of dy ("+outDepth+") must "+("match output depth for filter ("+filterShape[3]+").")});if(dimRoundingMode!=null){assert(isInt(pad),function(){return"Error in conv2dDerFilter: pad must be an integer when using, "+("dimRoundingMode "+dimRoundingMode+" but got pad "+pad+".")})}var inputs={x:x4D,dy:dy4D};var attrs={strides:strides,pad:pad,dataFormat:dataFormat,dimRoundingMode:dimRoundingMode,filterShape:filterShape};return ENGINE.runKernel(Conv2DBackpropFilter,inputs,attrs)}var conv2DBackpropFilter=op({conv2DBackpropFilter_:conv2DBackpropFilter_});function getFusedDyActivation(dy,y,activation){if(activation==null||activation==="linear"){return dy}if(activation==="relu"){return mul(dy,step(y))}throw new Error("Cannot compute gradient for fused activation "+activation+".")}function getFusedBiasGradient(bias,dyActivation){var res=dyActivation;var reduceAxes=getReductionAxes(bias.shape,dyActivation.shape);if(reduceAxes.length>0){res=sum(res,reduceAxes)}return reshape(res,bias.shape)}function applyActivation(x,activation,preluActivationWeights,leakyreluAlpha){if(activation==="linear"){return x}else if(activation==="relu"){return relu(x)}else if(activation==="elu"){return elu(x)}else if(activation==="relu6"){return relu6(x)}else if(activation==="prelu"){return prelu(x,preluActivationWeights)}else if(activation==="leakyrelu"){return leakyRelu(x,leakyreluAlpha)}else if(activation==="sigmoid"){return sigmoid(x)}throw new Error("Unknown fused activation "+activation+".")}var shouldFuse=function(gradientDepth,activation){var gradientMode=gradientDepth>0;return!gradientMode||activation==="linear"};function fusedConv2d_(_a){var _b;var x=_a.x,filter=_a.filter,strides=_a.strides,pad=_a.pad,_c=_a.dataFormat,dataFormat=_c===void 0?"NHWC":_c,_d=_a.dilations,dilations=_d===void 0?[1,1]:_d,dimRoundingMode=_a.dimRoundingMode,bias=_a.bias,_e=_a.activation,activation=_e===void 0?"linear":_e,preluActivationWeights=_a.preluActivationWeights,leakyreluAlpha=_a.leakyreluAlpha;activation=activation||"linear";if(shouldFuse(ENGINE.state.gradientDepth,activation)===false){var result=conv2d$1(x,filter,strides,pad,dataFormat,dilations,dimRoundingMode);if(bias!=null){result=add(result,bias)}return applyActivation(result,activation,preluActivationWeights,leakyreluAlpha)}var $x=convertToTensor(x,"x","conv2d","float32");var $filter=convertToTensor(filter,"filter","conv2d","float32");var x4D=$x;var reshapedTo4D=false;if($x.rank===3){reshapedTo4D=true;x4D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2]])}assert(x4D.rank===4,function(){return"Error in fused conv2d: input must be rank 4, but got rank "+(x4D.rank+".")});assert($filter.rank===4,function(){return"Error in fused conv2d: filter must be rank 4, but got rank "+($filter.rank+".")});if(dimRoundingMode!=null){assert(isInt(pad),function(){return"Error in fused conv2d: pad must be an integer when using, "+("dimRoundingMode "+dimRoundingMode+" but got pad "+pad+".")})}assert(x4D.shape[3]===$filter.shape[2],function(){return"Error in conv2d: depth of input ("+x4D.shape[3]+") must match "+("input depth for filter "+$filter.shape[2]+".")});assert(eitherStridesOrDilationsAreOne(strides,dilations),function(){return"Error in conv2D: Either strides or dilations must be 1. "+("Got strides "+strides+" and dilations '"+dilations+"'")});assert(dataFormat==="NHWC",function(){return"Error in conv2d: got dataFormat of "+dataFormat+" but only NHWC is currently supported."});var convInfo=computeConv2DInfo(x4D.shape,$filter.shape,strides,dilations,pad,dimRoundingMode);var $bias;if(bias!=null){$bias=convertToTensor(bias,"bias","fused conv2d");_b=__read(makeTypesMatch($bias,$x),1),$bias=_b[0];assertAndGetBroadcastShape(convInfo.outShape,$bias.shape)}var $preluActivationWeights;if(preluActivationWeights!=null){$preluActivationWeights=convertToTensor(preluActivationWeights,"prelu weights","fused conv2d")}var grad=function(dy,saved){var _a=__read(saved,4),$filter=_a[0],x4D=_a[1],y=_a[2],$bias=_a[3];var dyActivation=getFusedDyActivation(dy,y,activation);assert(tupleValuesAreOne(dilations),function(){return"Error in gradient of fused conv2D: "+"dilation rates greater than 1 "+("are not yet supported in gradients. Got dilations '"+dilations+"'")});var xDer=conv2DBackpropInput(x4D.shape,dyActivation,$filter,strides,pad);var filterDer=conv2DBackpropFilter(x4D,dyActivation,$filter.shape,strides,pad);var der=[xDer,filterDer];if($bias!=null){var biasDer=getFusedBiasGradient($bias,dyActivation);der.push(biasDer)}return der};var inputs={x:x4D,filter:$filter,bias:$bias,preluActivationWeights:$preluActivationWeights};var attrs={strides:strides,pad:pad,dataFormat:dataFormat,dilations:dilations,dimRoundingMode:dimRoundingMode,activation:activation,leakyreluAlpha:leakyreluAlpha};if(bias==null){var customOp=customGrad(function(x4D,filter,save){var res=ENGINE.runKernel(FusedConv2D,inputs,attrs);save([filter,x4D,res]);if(reshapedTo4D){res=reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return{value:res,gradFunc:grad}});return customOp(x4D,$filter)}else{var customOpWithBias=customGrad(function(x4D,filter,bias,save){var res=ENGINE.runKernel(FusedConv2D,inputs,attrs);save([filter,x4D,res,bias]);if(reshapedTo4D){res=reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return{value:res,gradFunc:grad}});return customOpWithBias(x4D,$filter,$bias)}}var conv2d=op({fusedConv2d_:fusedConv2d_});function depthwiseConv2dNativeBackpropFilter_(x,dy,filterShape,strides,pad,dilations,dimRoundingMode){if(dilations===void 0){dilations=[1,1]}var x4D=x;if(x.rank===3){x4D=reshape(x,[1,x.shape[0],x.shape[1],x.shape[2]])}var dy4D=dy;if(dy4D.rank===3){dy4D=reshape(dy,[1,dy.shape[0],dy.shape[1],dy.shape[2]])}var inputs={x:x4D,dy:dy4D};var attrs={strides:strides,pad:pad,dimRoundingMode:dimRoundingMode,dilations:dilations,filterShape:filterShape};return ENGINE.runKernel(DepthwiseConv2dNativeBackpropFilter,inputs,attrs)}var depthwiseConv2dNativeBackpropFilter=op({depthwiseConv2dNativeBackpropFilter_:depthwiseConv2dNativeBackpropFilter_});function depthwiseConv2dNativeBackpropInput_(xShape,dy,filter,strides,pad,dilations,dimRoundingMode){if(dilations===void 0){dilations=[1,1]}var dy4D=dy;var reshapedTo4D=false;if(dy.rank===3){reshapedTo4D=true;dy4D=reshape(dy,[1,dy.shape[0],dy.shape[1],dy.shape[2]])}var inputs={dy:dy4D,filter:filter};var attrs={strides:strides,pad:pad,dimRoundingMode:dimRoundingMode,dilations:dilations,inputShape:xShape};var res=ENGINE.runKernel(DepthwiseConv2dNativeBackpropInput,inputs,attrs);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return res}var depthwiseConv2dNativeBackpropInput=op({depthwiseConv2dNativeBackpropInput_:depthwiseConv2dNativeBackpropInput_});function fusedDepthwiseConv2d_(_a){var _b;var x=_a.x,filter=_a.filter,strides=_a.strides,pad=_a.pad,_c=_a.dataFormat,dataFormat=_c===void 0?"NHWC":_c,_d=_a.dilations,dilations=_d===void 0?[1,1]:_d,dimRoundingMode=_a.dimRoundingMode,bias=_a.bias,_e=_a.activation,activation=_e===void 0?"linear":_e,preluActivationWeights=_a.preluActivationWeights,leakyreluAlpha=_a.leakyreluAlpha;if(shouldFuse(ENGINE.state.gradientDepth,activation)===false){var result=depthwiseConv2d$1(x,filter,strides,pad,dataFormat,dilations,dimRoundingMode);if(bias!=null){result=add(result,bias)}return applyActivation(result,activation,preluActivationWeights,leakyreluAlpha)}var $x=convertToTensor(x,"x","depthwiseConv2d","float32");var $filter=convertToTensor(filter,"filter","depthwiseConv2d","float32");var x4D=$x;var reshapedTo4D=false;if($x.rank===3){reshapedTo4D=true;x4D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2]])}assert(x4D.rank===4,function(){return"Error in fused depthwiseConv2d: input must be rank 4, but got "+("rank "+x4D.rank+".")});assert($filter.rank===4,function(){return"Error in fused depthwiseConv2d: filter must be rank 4, "+("but got rank "+$filter.rank+".")});assert(x4D.shape[3]===$filter.shape[2],function(){return"Error in fused depthwiseConv2d: number of input channels "+("("+x4D.shape[3]+") must match the inChannels dimension in ")+("filter "+$filter.shape[2]+".")});if(dilations==null){dilations=[1,1]}assert(eitherStridesOrDilationsAreOne(strides,dilations),function(){return"Error in fused depthwiseConv2d: Either strides or dilations must "+("be 1. Got strides "+strides+" and dilations '"+dilations+"'")});if(dimRoundingMode!=null){assert(isInt(pad),function(){return"Error in fused depthwiseConv2d: pad must be an integer when "+("using dimRoundingMode "+dimRoundingMode+" but got pad "+pad+".")})}var convInfo=computeConv2DInfo(x4D.shape,$filter.shape,strides,dilations,pad,dimRoundingMode,true);var $bias;if(bias!=null){$bias=convertToTensor(bias,"bias","fused conv2d");_b=__read(makeTypesMatch($bias,$x),1),$bias=_b[0];assertAndGetBroadcastShape(convInfo.outShape,$bias.shape)}var $preluActivationWeights;if(preluActivationWeights!=null){$preluActivationWeights=convertToTensor(preluActivationWeights,"prelu weights","fused depthwiseConv2d")}var grad=function(dy,saved){assert(tupleValuesAreOne(dilations),function(){return"Error in gradient of fused depthwiseConv2d: dilation rates "+"greater than 1 are not yet supported. Got dilations "+("'"+dilations+"'")});var _a=__read(saved,4),$filter=_a[0],x4D=_a[1],y=_a[2],bias=_a[3];var dyActivation=getFusedDyActivation(dy,y,activation);var xDer=depthwiseConv2dNativeBackpropInput(x4D.shape,dyActivation,$filter,strides,pad,dilations,dimRoundingMode);var filterDer=depthwiseConv2dNativeBackpropFilter(x4D,dyActivation,$filter.shape,strides,pad,dilations,dimRoundingMode);if(bias!=null){var biasDer=getFusedBiasGradient($bias,dyActivation);return[xDer,filterDer,biasDer]}return[xDer,filterDer]};var inputs={x:x4D,filter:$filter,bias:$bias,preluActivationWeights:$preluActivationWeights};var attrs={strides:strides,pad:pad,dataFormat:dataFormat,dilations:dilations,dimRoundingMode:dimRoundingMode,activation:activation,leakyreluAlpha:leakyreluAlpha};if(bias==null){var customOp=customGrad(function(x4D,filter,save){var res=ENGINE.runKernel(FusedDepthwiseConv2D,inputs,attrs);save([filter,x4D,res]);if(reshapedTo4D){res=reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return{value:res,gradFunc:grad}});return customOp(x4D,$filter)}else{var customOpWithBias=customGrad(function(x4D,filter,bias,save){var res=ENGINE.runKernel(FusedDepthwiseConv2D,inputs,attrs);save([filter,x4D,res,bias]);if(reshapedTo4D){res=reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return{value:res,gradFunc:grad}});return customOpWithBias(x4D,$filter,$bias)}}var depthwiseConv2d=op({fusedDepthwiseConv2d_:fusedDepthwiseConv2d_});function fusedMatMul_(_a){var _b,_c;var a=_a.a,b=_a.b,_d=_a.transposeA,transposeA=_d===void 0?false:_d,_e=_a.transposeB,transposeB=_e===void 0?false:_e,bias=_a.bias,_f=_a.activation,activation=_f===void 0?"linear":_f,preluActivationWeights=_a.preluActivationWeights,leakyreluAlpha=_a.leakyreluAlpha;if(shouldFuse(ENGINE.state.gradientDepth,activation)===false){var result=matMul$1(a,b,transposeA,transposeB);if(bias!=null){result=add(result,bias)}return applyActivation(result,activation,preluActivationWeights,leakyreluAlpha)}var $a=convertToTensor(a,"a","fused matMul");var $b=convertToTensor(b,"b","fused matMul");_b=__read(makeTypesMatch($a,$b),2),$a=_b[0],$b=_b[1];var innerShapeA=transposeA?$a.shape[$a.rank-2]:$a.shape[$a.rank-1];var innerShapeB=transposeB?$b.shape[$b.rank-1]:$b.shape[$b.rank-2];var outerShapeA=transposeA?$a.shape[$a.rank-1]:$a.shape[$a.rank-2];var outerShapeB=transposeB?$b.shape[$b.rank-2]:$b.shape[$b.rank-1];var outerDimsA=$a.shape.slice(0,-2);var outerDimsB=$b.shape.slice(0,-2);var batchDimA=sizeFromShape(outerDimsA);var batchDimB=sizeFromShape(outerDimsB);assert($a.rank>=2&&$b.rank>=2&&$a.rank===$b.rank,function(){return"Error in fused matMul: inputs must have the same rank of at "+("least 2, got ranks "+$a.rank+" and "+$b.rank+".")});assert(arraysEqual(outerDimsA,outerDimsB),function(){return"Error in fused matMul: outer dimensions ("+outerDimsA+") and ("+(outerDimsB+") of Tensors with shapes "+$a.shape+" and ")+($b.shape+" must match.")});assert(innerShapeA===innerShapeB,function(){return"Error in fused matMul: inner shapes ("+innerShapeA+") and ("+(innerShapeB+") of Tensors with shapes "+$a.shape+" and ")+($b.shape+" and transposeA="+transposeA)+(" and transposeB="+transposeB+" must match.")});var outShape=$a.shape.slice(0,-2).concat([outerShapeA,outerShapeB]);var a3D=transposeA?reshape($a,[batchDimA,innerShapeA,outerShapeA]):reshape($a,[batchDimA,outerShapeA,innerShapeA]);var b3D=transposeB?reshape($b,[batchDimB,outerShapeB,innerShapeB]):reshape($b,[batchDimB,innerShapeB,outerShapeB]);var $bias;if(bias!=null){$bias=convertToTensor(bias,"bias","fused matMul");_c=__read(makeTypesMatch($bias,$a),1),$bias=_c[0];assertAndGetBroadcastShape(outShape,$bias.shape)}var $preluActivationWeights;if(preluActivationWeights!=null){$preluActivationWeights=convertToTensor(preluActivationWeights,"prelu weights","fused matMul")}var grad=function(dy,saved){var _a=__read(saved,4),a3D=_a[0],b3D=_a[1],y=_a[2],$bias=_a[3];var dyActivation=getFusedDyActivation(reshape(dy,y.shape),y,activation);var aDer;var bDer;if(!transposeA&&!transposeB){aDer=matMul$1(dyActivation,b3D,false,true);bDer=matMul$1(a3D,dyActivation,true,false)}else if(!transposeA&&transposeB){aDer=matMul$1(dyActivation,b3D,false,false);bDer=matMul$1(dyActivation,a3D,true,false)}else if(transposeA&&!transposeB){aDer=matMul$1(b3D,dyActivation,false,true);bDer=matMul$1(a3D,dyActivation,false,false)}else{aDer=matMul$1(b3D,dyActivation,true,true);bDer=matMul$1(dyActivation,a3D,true,true)}if(bias!=null){var biasDer=getFusedBiasGradient($bias,dyActivation);return[aDer,bDer,biasDer]}else{return[aDer,bDer]}};var inputs={a:a3D,b:b3D,bias:$bias,preluActivationWeights:$preluActivationWeights};var attrs={transposeA:transposeA,transposeB:transposeB,activation:activation,leakyreluAlpha:leakyreluAlpha};if(bias==null){var customOp=customGrad(function(a3D,b3D,save){var res=ENGINE.runKernel(_FusedMatMul,inputs,attrs);save([a3D,b3D,res]);return{value:reshape(res,outShape),gradFunc:grad}});return customOp(a3D,b3D)}else{var customOpWithBias=customGrad(function(a3D,b3D,$bias,save){var res=ENGINE.runKernel(_FusedMatMul,inputs,attrs);save([a3D,b3D,res,$bias]);return{value:reshape(res,outShape),gradFunc:grad}});return customOpWithBias(a3D,b3D,$bias)}}var matMul=op({fusedMatMul_:fusedMatMul_});var fused_ops={__proto__:null,conv2d:conv2d,depthwiseConv2d:depthwiseConv2d,matMul:matMul};function hammingWindow_(windowLength){return cosineWindow(windowLength,.54,.46)}var hammingWindow=op({hammingWindow_:hammingWindow_});function hannWindow_(windowLength){return cosineWindow(windowLength,.5,.5)}var hannWindow=op({hannWindow_:hannWindow_});function frame_(signal,frameLength,frameStep,padEnd,padValue){if(padEnd===void 0){padEnd=false}if(padValue===void 0){padValue=0}var start=0;var output=[];while(start+frameLength<=signal.size){output.push(slice(signal,start,frameLength));start+=frameStep}if(padEnd){while(start<signal.size){var padLen=start+frameLength-signal.size;var pad=concat([slice(signal,start,frameLength-padLen),fill([padLen],padValue)]);output.push(pad);start+=frameStep}}if(output.length===0){return tensor2d([],[0,frameLength])}return reshape(concat(output),[output.length,frameLength])}var frame=op({frame_:frame_});function stft_(signal,frameLength,frameStep,fftLength,windowFn){if(windowFn===void 0){windowFn=hannWindow}if(fftLength==null){fftLength=enclosingPowerOfTwo(frameLength)}var framedSignal=frame(signal,frameLength,frameStep);var windowedSignal=mul(framedSignal,windowFn(frameLength));return rfft(windowedSignal,fftLength)}var stft=op({stft_:stft_});function cropAndResize_(image,boxes,boxInd,cropSize,method,extrapolationValue){if(method===void 0){method="bilinear"}if(extrapolationValue===void 0){extrapolationValue=0}var $image=convertToTensor(image,"image","cropAndResize");var $boxes=convertToTensor(boxes,"boxes","cropAndResize","float32");var $boxInd=convertToTensor(boxInd,"boxInd","cropAndResize","int32");var numBoxes=$boxes.shape[0];assert($image.rank===4,function(){return"Error in cropAndResize: image must be rank 4,"+("but got rank "+$image.rank+".")});assert($boxes.rank===2&&$boxes.shape[1]===4,function(){return"Error in cropAndResize: boxes must be have size ["+numBoxes+",4] "+("but had shape "+$boxes.shape+".")});assert($boxInd.rank===1&&$boxInd.shape[0]===numBoxes,function(){return"Error in cropAndResize: boxInd must be have size ["+numBoxes+"] "+("but had shape "+$boxes.shape+".")});assert(cropSize.length===2,function(){return"Error in cropAndResize: cropSize must be of length 2, but got "+("length "+cropSize.length+".")});assert(cropSize[0]>=1&&cropSize[1]>=1,function(){return"cropSize must be atleast [1,1], but was "+cropSize});assert(method==="bilinear"||method==="nearest",function(){return"method must be bilinear or nearest, but was "+method});var inputs={image:$image,boxes:$boxes,boxInd:$boxInd};var attrs={method:method,extrapolationValue:extrapolationValue,cropSize:cropSize};var res=ENGINE.runKernel(CropAndResize,inputs,attrs);return res}var cropAndResize=op({cropAndResize_:cropAndResize_});function flipLeftRight_(image){var $image=convertToTensor(image,"image","flipLeftRight","float32");assert($image.rank===4,function(){return"Error in flipLeftRight: image must be rank 4,"+("but got rank "+$image.rank+".")});var inputs={image:$image};var res=ENGINE.runKernel(FlipLeftRight,inputs,{});return res}var flipLeftRight=op({flipLeftRight_:flipLeftRight_});function grayscaleToRGB_(image){var $image=convertToTensor(image,"image","grayscaleToRGB");var lastDimsIdx=$image.rank-1;var lastDims=$image.shape[lastDimsIdx];assert($image.rank>=2,function(){return"Error in grayscaleToRGB: images must be at least rank 2, "+("but got rank "+$image.rank+".")});assert(lastDims===1,function(){return"Error in grayscaleToRGB: last dimension of a grayscale image "+("should be size 1, but got size "+lastDims+".")});var reps=new Array($image.rank);reps.fill(1,0,lastDimsIdx);reps[lastDimsIdx]=3;return tile($image,reps)}var grayscaleToRGB=op({grayscaleToRGB_:grayscaleToRGB_});function rotateWithOffset_(image,radians,fillValue,center){if(fillValue===void 0){fillValue=0}if(center===void 0){center=.5}var $image=convertToTensor(image,"image","rotateWithOffset","float32");assert($image.rank===4,function(){return"Error in rotateWithOffset: image must be rank 4,"+("but got rank "+$image.rank+".")});var inputs={image:$image};var attrs={radians:radians,fillValue:fillValue,center:center};var res=ENGINE.runKernel(RotateWithOffset,inputs,attrs);return res}var rotateWithOffset=op({rotateWithOffset_:rotateWithOffset_});function nonMaxSuppSanityCheck(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,softNmsSigma){if(iouThreshold==null){iouThreshold=.5}if(scoreThreshold==null){scoreThreshold=Number.NEGATIVE_INFINITY}if(softNmsSigma==null){softNmsSigma=0}var numBoxes=boxes.shape[0];maxOutputSize=Math.min(maxOutputSize,numBoxes);assert(0<=iouThreshold&&iouThreshold<=1,function(){return"iouThreshold must be in [0, 1], but was '"+iouThreshold+"'"});assert(boxes.rank===2,function(){return"boxes must be a 2D tensor, but was of rank '"+boxes.rank+"'"});assert(boxes.shape[1]===4,function(){return"boxes must have 4 columns, but 2nd dimension was "+boxes.shape[1]});assert(scores.rank===1,function(){return"scores must be a 1D tensor"});assert(scores.shape[0]===numBoxes,function(){return"scores has incompatible shape with boxes. Expected "+numBoxes+", "+("but was "+scores.shape[0])});assert(0<=softNmsSigma&&softNmsSigma<=1,function(){return"softNmsSigma must be in [0, 1], but was '"+softNmsSigma+"'"});return{maxOutputSize:maxOutputSize,iouThreshold:iouThreshold,scoreThreshold:scoreThreshold,softNmsSigma:softNmsSigma}}function nonMaxSuppression_(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold){if(iouThreshold===void 0){iouThreshold=.5}if(scoreThreshold===void 0){scoreThreshold=Number.NEGATIVE_INFINITY}var $boxes=convertToTensor(boxes,"boxes","nonMaxSuppression","float32");var $scores=convertToTensor(scores,"scores","nonMaxSuppression","float32");var inputs=nonMaxSuppSanityCheck($boxes,$scores,maxOutputSize,iouThreshold,scoreThreshold);maxOutputSize=inputs.maxOutputSize;iouThreshold=inputs.iouThreshold;scoreThreshold=inputs.scoreThreshold;var attrs={maxOutputSize:maxOutputSize,iouThreshold:iouThreshold,scoreThreshold:scoreThreshold};return ENGINE.runKernel(NonMaxSuppressionV3,{boxes:$boxes,scores:$scores},attrs)}var nonMaxSuppression=op({nonMaxSuppression_:nonMaxSuppression_});function binaryInsert(arr,element,comparator){var index=binarySearch(arr,element,comparator);var insertionPoint=index<0?-(index+1):index;arr.splice(insertionPoint,0,element)}function binarySearch(arr,target,comparator){return binarySearch_(arr,target,comparator||defaultComparator)}function defaultComparator(a,b){return a>b?1:a<b?-1:0}function binarySearch_(arr,target,comparator){var left=0;var right=arr.length;var middle=0;var found=false;while(left<right){middle=left+(right-left>>>1);var compareResult=comparator(target,arr[middle]);if(compareResult>0){left=middle+1}else{right=middle;found=!compareResult}}return found?left:-left-1}function nonMaxSuppressionV3Impl(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold){return nonMaxSuppressionImpl_(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,0)}function nonMaxSuppressionV4Impl(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,padToMaxOutputSize){return nonMaxSuppressionImpl_(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,0,false,padToMaxOutputSize,true)}function nonMaxSuppressionV5Impl(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,softNmsSigma){return nonMaxSuppressionImpl_(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,softNmsSigma,true)}function nonMaxSuppressionImpl_(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,softNmsSigma,returnScoresTensor,padToMaxOutputSize,returnValidOutputs){if(returnScoresTensor===void 0){returnScoresTensor=false}if(padToMaxOutputSize===void 0){padToMaxOutputSize=false}if(returnValidOutputs===void 0){returnValidOutputs=false}var candidates=[];for(var i=0;i<scores.length;i++){if(scores[i]>scoreThreshold){candidates.push({score:scores[i],boxIndex:i,suppressBeginIndex:0})}}candidates.sort(ascendingComparator);var scale=softNmsSigma>0?-.5/softNmsSigma:0;var selectedIndices=[];var selectedScores=[];while(selectedIndices.length<maxOutputSize&&candidates.length>0){var candidate=candidates.pop();var originalScore=candidate.score,boxIndex=candidate.boxIndex,suppressBeginIndex=candidate.suppressBeginIndex;if(originalScore<scoreThreshold){break}var ignoreCandidate=false;for(var j=selectedIndices.length-1;j>=suppressBeginIndex;--j){var iou=intersectionOverUnion(boxes,boxIndex,selectedIndices[j]);if(iou>=iouThreshold){ignoreCandidate=true;break}candidate.score=candidate.score*suppressWeight(iouThreshold,scale,iou);if(candidate.score<=scoreThreshold){break}}candidate.suppressBeginIndex=selectedIndices.length;if(!ignoreCandidate){if(candidate.score===originalScore){selectedIndices.push(boxIndex);selectedScores.push(candidate.score)}else if(candidate.score>scoreThreshold){binaryInsert(candidates,candidate,ascendingComparator)}}}var validOutputs=selectedIndices.length;var elemsToPad=maxOutputSize-validOutputs;if(padToMaxOutputSize&&elemsToPad>0){selectedIndices.push.apply(selectedIndices,__spread(new Array(elemsToPad).fill(0)));selectedScores.push.apply(selectedScores,__spread(new Array(elemsToPad).fill(0)))}var result={selectedIndices:selectedIndices};if(returnScoresTensor){result["selectedScores"]=selectedScores}if(returnValidOutputs){result["validOutputs"]=validOutputs}return result}function intersectionOverUnion(boxes,i,j){var iCoord=boxes.subarray(i*4,i*4+4);var jCoord=boxes.subarray(j*4,j*4+4);var yminI=Math.min(iCoord[0],iCoord[2]);var xminI=Math.min(iCoord[1],iCoord[3]);var ymaxI=Math.max(iCoord[0],iCoord[2]);var xmaxI=Math.max(iCoord[1],iCoord[3]);var yminJ=Math.min(jCoord[0],jCoord[2]);var xminJ=Math.min(jCoord[1],jCoord[3]);var ymaxJ=Math.max(jCoord[0],jCoord[2]);var xmaxJ=Math.max(jCoord[1],jCoord[3]);var areaI=(ymaxI-yminI)*(xmaxI-xminI);var areaJ=(ymaxJ-yminJ)*(xmaxJ-xminJ);if(areaI<=0||areaJ<=0){return 0}var intersectionYmin=Math.max(yminI,yminJ);var intersectionXmin=Math.max(xminI,xminJ);var intersectionYmax=Math.min(ymaxI,ymaxJ);var intersectionXmax=Math.min(xmaxI,xmaxJ);var intersectionArea=Math.max(intersectionYmax-intersectionYmin,0)*Math.max(intersectionXmax-intersectionXmin,0);return intersectionArea/(areaI+areaJ-intersectionArea)}function suppressWeight(iouThreshold,scale,iou){var weight=Math.exp(scale*iou*iou);return iou<=iouThreshold?weight:0}function ascendingComparator(c1,c2){return c1.score-c2.score||c1.score===c2.score&&c2.boxIndex-c1.boxIndex}function nonMaxSuppressionAsync_(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold){if(iouThreshold===void 0){iouThreshold=.5}if(scoreThreshold===void 0){scoreThreshold=Number.NEGATIVE_INFINITY}return __awaiter(this,void 0,void 0,function(){var $boxes,$scores,inputs,boxesAndScores,boxesVals,scoresVals,selectedIndices;return __generator(this,function(_a){switch(_a.label){case 0:$boxes=convertToTensor(boxes,"boxes","nonMaxSuppressionAsync");$scores=convertToTensor(scores,"scores","nonMaxSuppressionAsync");inputs=nonMaxSuppSanityCheck($boxes,$scores,maxOutputSize,iouThreshold,scoreThreshold);maxOutputSize=inputs.maxOutputSize;iouThreshold=inputs.iouThreshold;scoreThreshold=inputs.scoreThreshold;return[4,Promise.all([$boxes.data(),$scores.data()])];case 1:boxesAndScores=_a.sent();boxesVals=boxesAndScores[0];scoresVals=boxesAndScores[1];selectedIndices=nonMaxSuppressionV3Impl(boxesVals,scoresVals,maxOutputSize,iouThreshold,scoreThreshold).selectedIndices;if($boxes!==boxes){$boxes.dispose()}if($scores!==scores){$scores.dispose()}return[2,tensor1d(selectedIndices,"int32")]}})})}var nonMaxSuppressionAsync=nonMaxSuppressionAsync_;function nonMaxSuppressionWithScore_(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,softNmsSigma){if(iouThreshold===void 0){iouThreshold=.5}if(scoreThreshold===void 0){scoreThreshold=Number.NEGATIVE_INFINITY}if(softNmsSigma===void 0){softNmsSigma=0}var $boxes=convertToTensor(boxes,"boxes","nonMaxSuppression");var $scores=convertToTensor(scores,"scores","nonMaxSuppression");var params=nonMaxSuppSanityCheck($boxes,$scores,maxOutputSize,iouThreshold,scoreThreshold,softNmsSigma);maxOutputSize=params.maxOutputSize;iouThreshold=params.iouThreshold;scoreThreshold=params.scoreThreshold;softNmsSigma=params.softNmsSigma;var inputs={boxes:$boxes,scores:$scores};var attrs={maxOutputSize:maxOutputSize,iouThreshold:iouThreshold,scoreThreshold:scoreThreshold,softNmsSigma:softNmsSigma};var result=ENGINE.runKernel(NonMaxSuppressionV5,inputs,attrs);return{selectedIndices:result[0],selectedScores:result[1]}}var nonMaxSuppressionWithScore=op({nonMaxSuppressionWithScore_:nonMaxSuppressionWithScore_});function nonMaxSuppressionWithScoreAsync_(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,softNmsSigma){if(iouThreshold===void 0){iouThreshold=.5}if(scoreThreshold===void 0){scoreThreshold=Number.NEGATIVE_INFINITY}if(softNmsSigma===void 0){softNmsSigma=0}return __awaiter(this,void 0,void 0,function(){var $boxes,$scores,params,boxesAndScores,boxesVals,scoresVals,_a,selectedIndices,selectedScores;return __generator(this,function(_b){switch(_b.label){case 0:$boxes=convertToTensor(boxes,"boxes","nonMaxSuppressionAsync");$scores=convertToTensor(scores,"scores","nonMaxSuppressionAsync");params=nonMaxSuppSanityCheck($boxes,$scores,maxOutputSize,iouThreshold,scoreThreshold,softNmsSigma);maxOutputSize=params.maxOutputSize;iouThreshold=params.iouThreshold;scoreThreshold=params.scoreThreshold;softNmsSigma=params.softNmsSigma;return[4,Promise.all([$boxes.data(),$scores.data()])];case 1:boxesAndScores=_b.sent();boxesVals=boxesAndScores[0];scoresVals=boxesAndScores[1];_a=nonMaxSuppressionV5Impl(boxesVals,scoresVals,maxOutputSize,iouThreshold,scoreThreshold,softNmsSigma),selectedIndices=_a.selectedIndices,selectedScores=_a.selectedScores;if($boxes!==boxes){$boxes.dispose()}if($scores!==scores){$scores.dispose()}return[2,{selectedIndices:tensor1d(selectedIndices,"int32"),selectedScores:tensor1d(selectedScores)}]}})})}var nonMaxSuppressionWithScoreAsync=nonMaxSuppressionWithScoreAsync_;function nonMaxSuppressionPadded_(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,padToMaxOutputSize){if(iouThreshold===void 0){iouThreshold=.5}if(scoreThreshold===void 0){scoreThreshold=Number.NEGATIVE_INFINITY}if(padToMaxOutputSize===void 0){padToMaxOutputSize=false}var $boxes=convertToTensor(boxes,"boxes","nonMaxSuppression");var $scores=convertToTensor(scores,"scores","nonMaxSuppression");var params=nonMaxSuppSanityCheck($boxes,$scores,maxOutputSize,iouThreshold,scoreThreshold,null);var $maxOutputSize=params.maxOutputSize;var $iouThreshold=params.iouThreshold;var $scoreThreshold=params.scoreThreshold;var inputs={boxes:$boxes,scores:$scores};var attrs={maxOutputSize:$maxOutputSize,iouThreshold:$iouThreshold,scoreThreshold:$scoreThreshold,padToMaxOutputSize:padToMaxOutputSize};var result=ENGINE.runKernel(NonMaxSuppressionV4,inputs,attrs);return{selectedIndices:result[0],validOutputs:result[1]}}var nonMaxSuppressionPadded=op({nonMaxSuppressionPadded_:nonMaxSuppressionPadded_});function nonMaxSuppressionPaddedAsync_(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,padToMaxOutputSize){if(iouThreshold===void 0){iouThreshold=.5}if(scoreThreshold===void 0){scoreThreshold=Number.NEGATIVE_INFINITY}if(padToMaxOutputSize===void 0){padToMaxOutputSize=false}return __awaiter(this,void 0,void 0,function(){var $boxes,$scores,params,$maxOutputSize,$iouThreshold,$scoreThreshold,_a,boxesVals,scoresVals,_b,selectedIndices,validOutputs;return __generator(this,function(_c){switch(_c.label){case 0:$boxes=convertToTensor(boxes,"boxes","nonMaxSuppressionAsync");$scores=convertToTensor(scores,"scores","nonMaxSuppressionAsync");params=nonMaxSuppSanityCheck($boxes,$scores,maxOutputSize,iouThreshold,scoreThreshold,null);$maxOutputSize=params.maxOutputSize;$iouThreshold=params.iouThreshold;$scoreThreshold=params.scoreThreshold;return[4,Promise.all([$boxes.data(),$scores.data()])];case 1:_a=__read.apply(void 0,[_c.sent(),2]),boxesVals=_a[0],scoresVals=_a[1];_b=nonMaxSuppressionV4Impl(boxesVals,scoresVals,$maxOutputSize,$iouThreshold,$scoreThreshold,padToMaxOutputSize),selectedIndices=_b.selectedIndices,validOutputs=_b.validOutputs;if($boxes!==boxes){$boxes.dispose()}if($scores!==scores){$scores.dispose()}return[2,{selectedIndices:tensor1d(selectedIndices,"int32"),validOutputs:scalar(validOutputs,"int32")}]}})})}var nonMaxSuppressionPaddedAsync=nonMaxSuppressionPaddedAsync_;function resizeBilinear_(images,size,alignCorners,halfPixelCenters){if(alignCorners===void 0){alignCorners=false}if(halfPixelCenters===void 0){halfPixelCenters=false}var $images=convertToTensor(images,"images","resizeBilinear");assert($images.rank===3||$images.rank===4,function(){return"Error in resizeBilinear: x must be rank 3 or 4, but got "+("rank "+$images.rank+".")});assert(size.length===2,function(){return"Error in resizeBilinear: new shape must 2D, but got shape "+(size+".")});assert(halfPixelCenters===false||alignCorners===false,function(){return"Error in resizeBilinear: If halfPixelCenters is true, "+"alignCorners must be false."});var batchImages=$images;var reshapedTo4D=false;if($images.rank===3){reshapedTo4D=true;batchImages=reshape($images,[1,$images.shape[0],$images.shape[1],$images.shape[2]])}__read(size,0);var inputs={images:batchImages};var attrs={alignCorners:alignCorners,halfPixelCenters:halfPixelCenters,size:size};var res=ENGINE.runKernel(ResizeBilinear,inputs,attrs);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return res}var resizeBilinear=op({resizeBilinear_:resizeBilinear_});function resizeNearestNeighbor_(images,size,alignCorners,halfPixelCenters){if(alignCorners===void 0){alignCorners=false}if(halfPixelCenters===void 0){halfPixelCenters=false}var $images=convertToTensor(images,"images","resizeNearestNeighbor");assert($images.rank===3||$images.rank===4,function(){return"Error in resizeNearestNeighbor: x must be rank 3 or 4, but got "+("rank "+$images.rank+".")});assert(size.length===2,function(){return"Error in resizeNearestNeighbor: new shape must 2D, but got shape "+(size+".")});assert($images.dtype==="float32"||$images.dtype==="int32",function(){return"`images` must have `int32` or `float32` as dtype"});assert(halfPixelCenters===false||alignCorners===false,function(){return"Error in resizeNearestNeighbor: If halfPixelCenters is true, "+"alignCorners must be false."});var batchImages=$images;var reshapedTo4D=false;if($images.rank===3){reshapedTo4D=true;batchImages=reshape($images,[1,$images.shape[0],$images.shape[1],$images.shape[2]])}__read(size,0);var inputs={images:batchImages};var attrs={alignCorners:alignCorners,halfPixelCenters:halfPixelCenters,size:size};var res=ENGINE.runKernel(ResizeNearestNeighbor,inputs,attrs);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return res}var resizeNearestNeighbor=op({resizeNearestNeighbor_:resizeNearestNeighbor_});function threshold_(image,method,inverted,threshValue){var _a;if(method===void 0){method="binary"}if(inverted===void 0){inverted=false}if(threshValue===void 0){threshValue=.5}var $image=convertToTensor(image,"image","threshold");var RED_INTENCITY_COEF=.2989;var GREEN_INTENCITY_COEF=.587;var BLUE_INTENCITY_COEF=.114;var totalPixelsInImage=$image.shape[0]*$image.shape[1];var $threshold=mul(tensor1d([threshValue]),255);var r,g,b,grayscale;assert($image.rank===3,function(){return"Error in threshold: image must be rank 3,"+("but got rank "+$image.rank+".")});assert($image.shape[2]===3||$image.shape[2]===1,function(){return"Error in threshold: "+"image color channel must be equal to 3 or 1"+("but got "+$image.shape[2]+".")});assert($image.dtype==="int32"||$image.dtype==="float32",function(){return"Error in dtype: image dtype must be int32 or float32,"+("but got dtype "+$image.dtype+".")});assert(method==="otsu"||method==="binary",function(){return"Method must be binary or otsu, but was "+method});if($image.shape[2]===3){_a=__read(split$1($image,[1,1,1],-1),3),r=_a[0],g=_a[1],b=_a[2];var $r=mul(r,RED_INTENCITY_COEF);var $g=mul(g,GREEN_INTENCITY_COEF);var $b=mul(b,BLUE_INTENCITY_COEF);grayscale=add(add($r,$g),$b)}else{grayscale=image}if(method==="otsu"){var $histogram=bincount(cast(round(grayscale),"int32"),tensor([]),256);$threshold=otsu($histogram,totalPixelsInImage)}var invCondition=inverted?lessEqual(grayscale,$threshold):greater(grayscale,$threshold);var result=cast(mul(invCondition,255),"int32");return result}function otsu(histogram,total){var bestThresh=tensor1d([-1]);var bestInBetVar=tensor1d([0]);var cInBetVar=tensor1d([0]);var classFirst,classSecond,meanFirst,meanSec,weightForeground,weightBack;for(var index=0;index<histogram.size-1;index++){classFirst=slice(histogram,0,index+1);classSecond=slice(histogram,index+1);weightForeground=div(sum(classFirst),total);weightBack=div(sum(classSecond),total);var meanFirstDivA=sum(mul(classFirst,range(0,classFirst.size)));meanFirst=div(meanFirstDivA,sum(classFirst));var meanSecFill=fill(classSecond.shape,classFirst.size);var meanSecAdd=add(range(0,classSecond.size),meanSecFill);var meanSecMul=mul(classSecond,meanSecAdd);meanSec=div(sum(meanSecMul),sum(classSecond));var cInBetVarSubA=sub(meanFirst,meanSec);var cInBetVarSubB=sub(meanFirst,meanSec);var cInBetVarMul=mul(weightForeground,weightBack);cInBetVar=mul(mul(cInBetVarMul,cInBetVarSubA),cInBetVarSubB);var condition=greater(cInBetVar,bestInBetVar);bestInBetVar=where(condition,cInBetVar,bestInBetVar);bestThresh=where(condition,tensor1d([index]),bestThresh)}return bestThresh}var threshold=op({threshold_:threshold_});function transform_(image,transforms,interpolation,fillMode,fillValue,outputShape){if(interpolation===void 0){interpolation="nearest"}if(fillMode===void 0){fillMode="constant"}if(fillValue===void 0){fillValue=0}var $image=convertToTensor(image,"image","transform","float32");var $transforms=convertToTensor(transforms,"transforms","transform","float32");assert($image.rank===4,function(){return"Error in transform: image must be rank 4,"+("but got rank "+$image.rank+".")});assert($transforms.rank===2&&($transforms.shape[0]===$image.shape[0]||$transforms.shape[0]===1)&&$transforms.shape[1]===8,function(){return"Error in transform: Input transform should be batch x 8 or 1 x 8"});assert(outputShape==null||outputShape.length===2,function(){return"Error in transform: outputShape must be [height, width] or null, "+("but got "+outputShape+".")});var inputs={image:$image,transforms:$transforms};var attrs={interpolation:interpolation,fillMode:fillMode,fillValue:fillValue,outputShape:outputShape};return ENGINE.runKernel(Transform,inputs,attrs)}var transform=op({transform_:transform_});function bandPart_(a,numLower,numUpper){assert(numLower%1===0,function(){return"bandPart(): numLower must be an integer, got "+numLower+"."});assert(numUpper%1===0,function(){return"bandPart(): numUpper must be an integer, got "+numUpper+"."});var $a=convertToTensor(a,"a","bandPart");assert($a.rank>=2,function(){return"bandPart(): Rank must be at least 2, got "+$a.rank+"."});var shape=$a.shape;var _a=__read($a.shape.slice(-2),2),M=_a[0],N=_a[1];if(!(numLower<=M)){throw new Error("bandPart(): numLower ("+numLower+")"+(" must not be greater than the number of rows ("+M+")."))}if(!(numUpper<=N)){throw new Error("bandPart(): numUpper ("+numUpper+")"+(" must not be greater than the number of columns ("+N+")."))}if(numLower<0){numLower=M}if(numUpper<0){numUpper=N}var i=reshape(range(0,M,1,"int32"),[-1,1]);var j=range(0,N,1,"int32");var ij=sub(i,j);var inBand=logicalAnd(lessEqual(ij,scalar(+numLower,"int32")),greaterEqual(ij,scalar(-numUpper,"int32")));var zero=zeros([M,N],$a.dtype);return reshape(stack(unstack(reshape($a,[-1,M,N])).map(function(mat){return where(inBand,mat,zero)})),shape)}var bandPart=op({bandPart_:bandPart_});function gramSchmidt_(xs){var inputIsTensor2D;if(Array.isArray(xs)){inputIsTensor2D=false;assert(xs!=null&&xs.length>0,function(){return"Gram-Schmidt process: input must not be null, undefined, or "+"empty"});var dim_1=xs[0].shape[0];var _loop_1=function(i){assert(xs[i].shape[0]===dim_1,function(){return"Gram-Schmidt: Non-unique lengths found in the input vectors: "+("("+xs[i].shape[0]+" vs. "+dim_1+")")})};for(var i=1;i<xs.length;++i){_loop_1(i)}}else{inputIsTensor2D=true;xs=split$1(xs,xs.shape[0],0).map(function(x){return squeeze(x,[0])})}assert(xs.length<=xs[0].shape[0],function(){return"Gram-Schmidt: Number of vectors ("+xs.length+") exceeds "+("number of dimensions ("+xs[0].shape[0]+").")});var ys=[];var xs1d=xs;var _loop_2=function(i){ys.push(ENGINE.tidy(function(){var x=xs1d[i];if(i>0){for(var j=0;j<i;++j){var proj=mul(sum(mul(ys[j],x)),ys[j]);x=sub(x,proj)}}return div(x,norm(x,"euclidean"))}))};for(var i=0;i<xs.length;++i){_loop_2(i)}if(inputIsTensor2D){return stack(ys,0)}else{return ys}}var gramSchmidt=op({gramSchmidt_:gramSchmidt_});function dispose(container){var tensors=getTensorsInContainer(container);tensors.forEach(function(tensor){return tensor.dispose()})}function qr_(x,fullMatrices){if(fullMatrices===void 0){fullMatrices=false}assert(x.rank>=2,function(){return"qr() requires input tensor to have a rank >= 2, but got rank "+x.rank});if(x.rank===2){return qr2d(x,fullMatrices)}else{var outerDimsProd=x.shape.slice(0,x.shape.length-2).reduce(function(value,prev){return value*prev});var x2ds=unstack(reshape(x,[outerDimsProd,x.shape[x.shape.length-2],x.shape[x.shape.length-1]]),0);var q2ds_1=[];var r2ds_1=[];x2ds.forEach(function(x2d){var _a=__read(qr2d(x2d,fullMatrices),2),q2d=_a[0],r2d=_a[1];q2ds_1.push(q2d);r2ds_1.push(r2d)});var q=reshape(stack(q2ds_1,0),x.shape);var r=reshape(stack(r2ds_1,0),x.shape);return[q,r]}}function qr2d(x,fullMatrices){if(fullMatrices===void 0){fullMatrices=false}return ENGINE.tidy(function(){assert(x.shape.length===2,function(){return"qr2d() requires a 2D Tensor, but got a "+x.shape.length+"D Tensor."});var m=x.shape[0];var n=x.shape[1];var q=eye(m);var r=clone(x);var one2D=tensor2d([[1]],[1,1]);var w=clone(one2D);var iters=m>=n?n:m;var _loop_1=function(j){var _a;var rTemp=r;var wTemp=w;var qTemp=q;_a=__read(ENGINE.tidy(function(){var rjEnd1=slice(r,[j,j],[m-j,1]);var normX=norm(rjEnd1);var rjj=slice(r,[j,j],[1,1]);var s=where(greater(rjj,0),tensor2d([[-1]]),tensor2d([[1]]));var u1=sub(rjj,mul(s,normX));var wPre=div(rjEnd1,u1);if(wPre.shape[0]===1){w=clone(one2D)}else{w=concat([one2D,slice(wPre,[1,0],[wPre.shape[0]-1,wPre.shape[1]])],0)}var tau=neg(div(matMul$1(s,u1),normX));var rjEndAll=slice(r,[j,0],[m-j,n]);var tauTimesW=mul(tau,w);var wT=transpose(w);if(j===0){r=sub(rjEndAll,matMul$1(tauTimesW,matMul$1(wT,rjEndAll)))}else{var rTimesTau=sub(rjEndAll,matMul$1(tauTimesW,matMul$1(wT,rjEndAll)));r=concat([slice(r,[0,0],[j,n]),rTimesTau],0)}var tawTimesWT=transpose(tauTimesW);var qAllJEnd=slice(q,[0,j],[m,q.shape[1]-j]);if(j===0){q=sub(qAllJEnd,matMul$1(matMul$1(qAllJEnd,w),tawTimesWT))}else{var qTimesTau=sub(qAllJEnd,matMul$1(matMul$1(qAllJEnd,w),tawTimesWT));q=concat([slice(q,[0,0],[m,j]),qTimesTau],1)}return[w,r,q]}),3),w=_a[0],r=_a[1],q=_a[2];dispose([rTemp,wTemp,qTemp])};for(var j=0;j<iters;++j){_loop_1(j)}if(!fullMatrices&&m>n){q=slice(q,[0,0],[m,n]);r=slice(r,[0,0],[n,n])}return[q,r]})}var qr=op({qr_:qr_});var Reduction;(function(Reduction){Reduction[Reduction["NONE"]=0]="NONE";Reduction[Reduction["MEAN"]=1]="MEAN";Reduction[Reduction["SUM"]=2]="SUM";Reduction[Reduction["SUM_BY_NONZERO_WEIGHTS"]=3]="SUM_BY_NONZERO_WEIGHTS"})(Reduction||(Reduction={}));function computeWeightedLoss_(losses,weights,reduction){if(reduction===void 0){reduction=Reduction.SUM_BY_NONZERO_WEIGHTS}var $losses=convertToTensor(losses,"losses","computeWeightedLoss");var $weights=null;if(weights!=null){$weights=convertToTensor(weights,"weights","computeWeightedLoss")}var weightedLoss=$weights==null?$losses:mul($losses,$weights);if(reduction===Reduction.NONE){return weightedLoss}if(reduction===Reduction.SUM){return sum(weightedLoss)}if(reduction===Reduction.MEAN){if($weights==null){return mean(weightedLoss)}else{var broadcastFactor=$losses.size/$weights.size;var result=div(sum(weightedLoss),sum($weights));return broadcastFactor>1?div(result,scalar(broadcastFactor)):result}}if(reduction===Reduction.SUM_BY_NONZERO_WEIGHTS){if($weights==null){return div(sum(weightedLoss),scalar($losses.size))}else{var broadcastedWeights=mul($weights,ones($losses.shape));var numNonZeros=cast(sum(notEqual(broadcastedWeights,scalar(0))),"float32");return div(sum(weightedLoss),numNonZeros)}}throw Error("Unknown reduction: "+reduction)}var computeWeightedLoss=op({computeWeightedLoss_:computeWeightedLoss_});function absoluteDifference_(labels,predictions,weights,reduction){if(reduction===void 0){reduction=Reduction.SUM_BY_NONZERO_WEIGHTS}var $labels=convertToTensor(labels,"labels","absoluteDifference");var $predictions=convertToTensor(predictions,"predictions","absoluteDifference");var $weights=null;if(weights!=null){$weights=convertToTensor(weights,"weights","absoluteDifference")}assertShapesMatch($labels.shape,$predictions.shape,"Error in absoluteDifference: ");var losses=abs(sub($labels,$predictions));return computeWeightedLoss(losses,$weights,reduction)}var absoluteDifference=op({absoluteDifference_:absoluteDifference_});function cosineDistance_(labels,predictions,axis,weights,reduction){if(reduction===void 0){reduction=Reduction.SUM_BY_NONZERO_WEIGHTS}var $labels=convertToTensor(labels,"labels","cosineDistance");var $predictions=convertToTensor(predictions,"predictions","cosineDistance");var $weights=null;if(weights!=null){$weights=convertToTensor(weights,"weights","cosineDistance")}assertShapesMatch($labels.shape,$predictions.shape,"Error in cosineDistance: ");var one=scalar(1);var losses=sub(one,sum(mul($labels,$predictions),axis,true));return computeWeightedLoss(losses,$weights,reduction)}var cosineDistance=op({cosineDistance_:cosineDistance_});function hingeLoss_(labels,predictions,weights,reduction){if(reduction===void 0){reduction=Reduction.SUM_BY_NONZERO_WEIGHTS}var $labels=convertToTensor(labels,"labels","hingeLoss");var $predictions=convertToTensor(predictions,"predictions","hingeLoss");var $weights=null;if(weights!=null){$weights=convertToTensor(weights,"weights","hingeLoss")}assertShapesMatch($labels.shape,$predictions.shape,"Error in hingeLoss: ");var one=scalar(1);$labels=sub(mul(scalar(2),$labels),one);var losses=relu(sub(one,mul($labels,$predictions)));return computeWeightedLoss(losses,$weights,reduction)}var hingeLoss=op({hingeLoss_:hingeLoss_});function huberLoss_(labels,predictions,weights,delta,reduction){if(delta===void 0){delta=1}if(reduction===void 0){reduction=Reduction.SUM_BY_NONZERO_WEIGHTS}var $labels=convertToTensor(labels,"labels","huberLoss");var $predictions=convertToTensor(predictions,"predictions","huberLoss");var $weights=null;if(weights!=null){$weights=convertToTensor(weights,"weights","huberLoss")}assertShapesMatch($labels.shape,$predictions.shape,"Error in huberLoss: ");var deltaScalar=scalar(delta);var error=abs(sub($predictions,$labels));var quadratic=minimum(error,deltaScalar);var linear=sub(error,quadratic);var losses=add(mul(scalar(.5),square(quadratic)),mul(deltaScalar,linear));return computeWeightedLoss(losses,$weights,reduction)}var huberLoss=op({huberLoss_:huberLoss_});function logLoss_(labels,predictions,weights,epsilon,reduction){if(epsilon===void 0){epsilon=1e-7}if(reduction===void 0){reduction=Reduction.SUM_BY_NONZERO_WEIGHTS}var $labels=convertToTensor(labels,"labels","logLoss");var $predictions=convertToTensor(predictions,"predictions","logLoss");var $weights=null;if(weights!=null){$weights=convertToTensor(weights,"weights","logLoss")}assertShapesMatch($labels.shape,$predictions.shape,"Error in logLoss: ");var one=scalar(1);var epsilonScalar=scalar(epsilon);var l1=neg(mul($labels,log(add($predictions,epsilonScalar))));var l2=mul(sub(one,$labels),log(add(sub(one,$predictions),epsilonScalar)));var losses=sub(l1,l2);return computeWeightedLoss(losses,$weights,reduction)}var logLoss=op({logLoss_:logLoss_});function meanSquaredError_(labels,predictions,weights,reduction){if(reduction===void 0){reduction=Reduction.SUM_BY_NONZERO_WEIGHTS}var $labels=convertToTensor(labels,"labels","meanSquaredError");var $predictions=convertToTensor(predictions,"predictions","meanSquaredError");var $weights=null;if(weights!=null){$weights=convertToTensor(weights,"weights","meanSquaredError")}assertShapesMatch($labels.shape,$predictions.shape,"Error in meanSquaredError: ");var losses=squaredDifference($labels,$predictions);return computeWeightedLoss(losses,$weights,reduction)}var meanSquaredError=op({meanSquaredError_:meanSquaredError_});function sigmoidCrossEntropyWithLogits_(labels,logits){var $labels=convertToTensor(labels,"labels","sigmoidCrossEntropyWithLogits");var $logits=convertToTensor(logits,"logits","sigmoidCrossEntropyWithLogits");assertShapesMatch($labels.shape,$logits.shape,"Error in sigmoidCrossEntropyWithLogits: ");var maxOutput=relu($logits);var outputXTarget=mul($logits,$labels);var sigmoidOutput=log1p(exp(neg(abs($logits))));return add(sub(maxOutput,outputXTarget),sigmoidOutput)}function sigmoidCrossEntropy_(multiClassLabels,logits,weights,labelSmoothing,reduction){if(labelSmoothing===void 0){labelSmoothing=0}if(reduction===void 0){reduction=Reduction.SUM_BY_NONZERO_WEIGHTS}var $multiClassLabels=convertToTensor(multiClassLabels,"multiClassLabels","sigmoidCrossEntropy");var $logits=convertToTensor(logits,"logits","sigmoidCrossEntropy");var $weights=null;if(weights!=null){$weights=convertToTensor(weights,"weights","sigmoidCrossEntropy")}assertShapesMatch($multiClassLabels.shape,$logits.shape,"Error in sigmoidCrossEntropy: ");if(labelSmoothing>0){var labelSmoothingScalar=scalar(labelSmoothing);var one=scalar(1);var half=scalar(.5);$multiClassLabels=add(mul($multiClassLabels,sub(one,labelSmoothingScalar)),mul(half,labelSmoothingScalar))}var losses=sigmoidCrossEntropyWithLogits_($multiClassLabels,$logits);return computeWeightedLoss(losses,$weights,reduction)}var sigmoidCrossEntropy=op({sigmoidCrossEntropy_:sigmoidCrossEntropy_});function softmaxCrossEntropyWithLogits_(labels,logits,dim){if(dim===void 0){dim=-1}if(dim===-1){dim=logits.rank-1}if(dim!==logits.rank-1){throw Error("Softmax cross entropy along a non-last dimension is not yet "+("supported. Labels / logits was rank "+logits.rank+" ")+("and dim was "+dim))}var customOp=customGrad(function(labels,logits,save){var keepDims=true;var lse=logSumExp(logits,[dim],keepDims);var logResult=sub(cast(logits,"float32"),lse);save([labels,logResult]);var costVector=neg(mul(logResult,labels));var value=sum(costVector,[dim]);var gradFunc=function(dy,saved){var _a=__read(saved,2),labels=_a[0],logResult=_a[1];var dyShape=expandShapeToKeepDim(dy.shape,[dim]);return[mul(reshape(dy,dyShape),sub(cast(labels,"float32"),exp(logResult))),mul(reshape(dy,dyShape),sub(exp(logResult),cast(labels,"float32")))]};return{value:value,gradFunc:gradFunc}});return customOp(labels,logits)}function softmaxCrossEntropy_(onehotLabels,logits,weights,labelSmoothing,reduction){if(labelSmoothing===void 0){labelSmoothing=0}if(reduction===void 0){reduction=Reduction.SUM_BY_NONZERO_WEIGHTS}var $onehotLabels=convertToTensor(onehotLabels,"onehotLabels","softmaxCrossEntropy");var $logits=convertToTensor(logits,"logits","softmaxCrossEntropy");var $weights=null;if(weights!=null){$weights=convertToTensor(weights,"weights","softmaxCrossEntropy")}assertShapesMatch($onehotLabels.shape,$logits.shape,"Error in softmaxCrossEntropy: ");if(labelSmoothing>0){var labelSmoothingScalar=scalar(labelSmoothing);var one=scalar(1);var numClasses=scalar($onehotLabels.shape[1]);$onehotLabels=add(mul($onehotLabels,sub(one,labelSmoothingScalar)),div(labelSmoothingScalar,numClasses))}var losses=softmaxCrossEntropyWithLogits_($onehotLabels,$logits);return computeWeightedLoss(losses,$weights,reduction)}var softmaxCrossEntropy=op({softmaxCrossEntropy_:softmaxCrossEntropy_});function sparseFillEmptyRows_(indices,values,denseShape,defaultValue){var $indices=convertToTensor(indices,"indices","sparseFillEmptyRows");var $values=convertToTensor(values,"values","sparseFillEmptyRows");var $denseShape=convertToTensor(denseShape,"denseShape","sparseFillEmptyRows");var $defaultValue=convertToTensor(defaultValue,"defaultValue","sparseFillEmptyRows",$values.dtype);if($indices.rank!==2){throw new Error("Indices should be Tensor2D but received shape\n        "+$indices.shape)}if($values.rank!==1){throw new Error("Values should be Tensor1D but received shape "+$values.shape)}if($denseShape.rank!==1){throw new Error("Dense shape should be Tensor1D but received shape "+$denseShape.shape)}if($defaultValue.rank!==0){throw new Error("Default value should be a scalar but received shape "+$defaultValue.shape)}var inputs={indices:$indices,values:$values,denseShape:$denseShape,defaultValue:$defaultValue};var result=ENGINE.runKernel(SparseFillEmptyRows,inputs);return{outputIndices:result[0],outputValues:result[1],emptyRowIndicator:result[2],reverseIndexMap:result[3]}}var sparseFillEmptyRows=op({sparseFillEmptyRows_:sparseFillEmptyRows_});function sparseReshape_(inputIndices,inputShape,newShape){var $inputIndices=convertToTensor(inputIndices,"inputIndices","sparseReshape");var $inputShape=convertToTensor(inputShape,"inputShape","sparseReshape");var $newShape=convertToTensor(newShape,"newShape","sparseReshape");if($inputIndices.rank!==2){throw new Error("Input indices should be Tensor2D but received shape\n        "+$inputIndices.shape)}if($inputShape.rank!==1){throw new Error("Input shape should be Tensor1D but received shape "+$inputShape.shape)}if($newShape.rank!==1){throw new Error("New shape should be Tensor1D but received shape "+$newShape.shape)}var inputs={inputIndices:$inputIndices,inputShape:$inputShape,newShape:$newShape};var result=ENGINE.runKernel(SparseReshape,inputs);return{outputIndices:result[0],outputShape:result[1]}}var sparseReshape=op({sparseReshape_:sparseReshape_});function sparseSegmentMean_(data,indices,segmentIds){var $data=convertToTensor(data,"data","sparseSegmentMean");var $indices=convertToTensor(indices,"indices","sparseSegmentMean");var $segmentIds=convertToTensor(segmentIds,"segmentIds","sparseSegmentMean");if($data.rank<1){throw new Error("Data should be at least 1 dimensional but received scalar")}if($indices.rank!==1){throw new Error("Indices should be Tensor1D but received shape\n          "+$indices.shape)}if($segmentIds.rank!==1){throw new Error("Segment ids should be Tensor1D but received shape\n          "+$segmentIds.shape)}var inputs={data:$data,indices:$indices,segmentIds:$segmentIds};return ENGINE.runKernel(SparseSegmentMean,inputs)}var sparseSegmentMean=op({sparseSegmentMean_:sparseSegmentMean_});function sparseSegmentSum_(data,indices,segmentIds){var $data=convertToTensor(data,"data","sparseSegmentSum");var $indices=convertToTensor(indices,"indices","sparseSegmentSum");var $segmentIds=convertToTensor(segmentIds,"segmentIds","sparseSegmentSum");if($data.rank<1){throw new Error("Data should be at least 1 dimensional but received scalar")}if($indices.rank!==1){throw new Error("Indices should be Tensor1D but received shape\n         "+$indices.shape)}if($segmentIds.rank!==1){throw new Error("Segment ids should be Tensor1D but received shape\n         "+$segmentIds.shape)}var inputs={data:$data,indices:$indices,segmentIds:$segmentIds};return ENGINE.runKernel(SparseSegmentSum,inputs)}var sparseSegmentSum=op({sparseSegmentSum_:sparseSegmentSum_});function stringNGrams_(data,dataSplits,separator,nGramWidths,leftPad,rightPad,padWidth,preserveShortSequences){var $data=convertToTensor(data,"data","stringNGrams","string");if($data.dtype!=="string"){throw new Error("Data must be of datatype string")}if($data.shape.length!==1){throw new Error("Data must be a vector, saw: "+$data.shape)}var $dataSplits=convertToTensor(dataSplits,"dataSplits","stringNGrams");if($dataSplits.dtype!=="int32"){throw new Error("Data splits must be of datatype int32")}var attrs={separator:separator,nGramWidths:nGramWidths,leftPad:leftPad,rightPad:rightPad,padWidth:padWidth,preserveShortSequences:preserveShortSequences};var inputs={data:$data,dataSplits:$dataSplits};var result=ENGINE.runKernel(StringNGrams,inputs,attrs);return{nGrams:result[0],nGramsSplits:result[1]}}var stringNGrams=op({stringNGrams_:stringNGrams_});function stringSplit_(input,delimiter,skipEmpty){if(skipEmpty===void 0){skipEmpty=true}var $input=convertToTensor(input,"input","stringSplit","string");var $delimiter=convertToTensor(delimiter,"delimiter","stringSplit","string");if($input.rank!==1){throw new Error("Input should be Tensor1D but received shape "+$input.shape)}if($delimiter.rank!==0){throw new Error("Delimiter should be a scalar but received shape "+$delimiter.shape)}var attrs={skipEmpty:skipEmpty};var inputs={input:$input,delimiter:$delimiter};var result=ENGINE.runKernel(StringSplit,inputs,attrs);return{indices:result[0],values:result[1],shape:result[2]}}var stringSplit=op({stringSplit_:stringSplit_});function stringToHashBucketFast_(input,numBuckets){var $input=convertToTensor(input,"input","stringToHashBucketFast","string");var attrs={numBuckets:numBuckets};if(numBuckets<=0){throw new Error("Number of buckets must be at least 1")}var inputs={input:$input};return ENGINE.runKernel(StringToHashBucketFast,inputs,attrs)}var stringToHashBucketFast=op({stringToHashBucketFast_:stringToHashBucketFast_});var spectral={fft:fft,ifft:ifft,rfft:rfft,irfft:irfft};var signal={hammingWindow:hammingWindow,hannWindow:hannWindow,frame:frame,stft:stft};var image={flipLeftRight:flipLeftRight,grayscaleToRGB:grayscaleToRGB,resizeNearestNeighbor:resizeNearestNeighbor,resizeBilinear:resizeBilinear,rotateWithOffset:rotateWithOffset,cropAndResize:cropAndResize,nonMaxSuppression:nonMaxSuppression,nonMaxSuppressionAsync:nonMaxSuppressionAsync,nonMaxSuppressionWithScore:nonMaxSuppressionWithScore,nonMaxSuppressionWithScoreAsync:nonMaxSuppressionWithScoreAsync,nonMaxSuppressionPadded:nonMaxSuppressionPadded,nonMaxSuppressionPaddedAsync:nonMaxSuppressionPaddedAsync,threshold:threshold,transform:transform};var linalg={bandPart:bandPart,gramSchmidt:gramSchmidt,qr:qr};var losses={absoluteDifference:absoluteDifference,computeWeightedLoss:computeWeightedLoss,cosineDistance:cosineDistance,hingeLoss:hingeLoss,huberLoss:huberLoss,logLoss:logLoss,meanSquaredError:meanSquaredError,sigmoidCrossEntropy:sigmoidCrossEntropy,softmaxCrossEntropy:softmaxCrossEntropy};var sparse={sparseFillEmptyRows:sparseFillEmptyRows,sparseReshape:sparseReshape,sparseSegmentMean:sparseSegmentMean,sparseSegmentSum:sparseSegmentSum};var string={stringNGrams:stringNGrams,stringSplit:stringSplit,stringToHashBucketFast:stringToHashBucketFast};var tfOps={__proto__:null,abs:abs,acos:acos,acosh:acosh,add:add,addN:addN,all:all,any:any,argMax:argMax,argMin:argMin,asin:asin,asinh:asinh,atan:atan,atan2:atan2,atanh:atanh,avgPool:avgPool,avgPool3d:avgPool3d,basicLSTMCell:basicLSTMCell,batchToSpaceND:batchToSpaceND,batchNorm:batchNorm,batchNorm2d:batchNorm2d,batchNorm3d:batchNorm3d,batchNorm4d:batchNorm4d,bincount:bincount,broadcastArgs:broadcastArgs,broadcastTo:broadcastTo,buffer:buffer,cast:cast,ceil:ceil,clipByValue:clipByValue,clone:clone,complex:complex,concat:concat,concat1d:concat1d,concat2d:concat2d,concat3d:concat3d,concat4d:concat4d,conv1d:conv1d,conv2d:conv2d$1,conv2dTranspose:conv2dTranspose,conv3d:conv3d,conv3dTranspose:conv3dTranspose,cos:cos,cosh:cosh,cumsum:cumsum,denseBincount:denseBincount,depthToSpace:depthToSpace,depthwiseConv2d:depthwiseConv2d$1,diag:diag,dilation2d:dilation2d,div:div,divNoNan:divNoNan,dot:dot,einsum:einsum,elu:elu,equal:equal,erf:erf,exp:exp,expandDims:expandDims,expm1:expm1,eye:eye,fill:fill,floor:floor,floorDiv:floorDiv,gather:gather,greater:greater,greaterEqual:greaterEqual,imag:imag,isFinite:isFinite$1,isInf:isInf,isNaN:isNaN$1,leakyRelu:leakyRelu,less:less,lessEqual:lessEqual,linspace:linspace,localResponseNormalization:localResponseNormalization,log:log,log1p:log1p,logSigmoid:logSigmoid,logSoftmax:logSoftmax,logSumExp:logSumExp,logicalAnd:logicalAnd,logicalNot:logicalNot,logicalOr:logicalOr,logicalXor:logicalXor,matMul:matMul$1,max:max,maxPool:maxPool,maxPool3d:maxPool3d,maxPoolWithArgmax:maxPoolWithArgmax,maximum:maximum,mean:mean,meshgrid:meshgrid,min:min,minimum:minimum,mirrorPad:mirrorPad,mod:mod,moments:moments,mul:mul,multiRNNCell:multiRNNCell,multinomial:multinomial,neg:neg,notEqual:notEqual,oneHot:oneHot,ones:ones,onesLike:onesLike,outerProduct:outerProduct,pad:pad,pad1d:pad1d,pad2d:pad2d,pad3d:pad3d,pad4d:pad4d,pool:pool,pow:pow,prelu:prelu,print:print,prod:prod,rand:rand,randomGamma:randomGamma,randomNormal:randomNormal,randomUniform:randomUniform,range:range,real:real,reciprocal:reciprocal,relu:relu,relu6:relu6,reshape:reshape,reverse:reverse,reverse1d:reverse1d,reverse2d:reverse2d,reverse3d:reverse3d,reverse4d:reverse4d,round:round,rsqrt:rsqrt,scalar:scalar,selu:selu,separableConv2d:separableConv2d,setdiff1dAsync:setdiff1dAsync,sigmoid:sigmoid,sign:sign,sin:sin,sinh:sinh,slice:slice,slice1d:slice1d,slice2d:slice2d,slice3d:slice3d,slice4d:slice4d,softmax:softmax,softplus:softplus,spaceToBatchND:spaceToBatchND,fft:fft,ifft:ifft,irfft:irfft,rfft:rfft,split:split$1,sqrt:sqrt,square:square,squaredDifference:squaredDifference,squeeze:squeeze,stack:stack,step:step,stridedSlice:stridedSlice,sub:sub,sum:sum,tan:tan,tanh:tanh,tensor:tensor,tensor1d:tensor1d,tensor2d:tensor2d,tensor3d:tensor3d,tensor4d:tensor4d,tensor5d:tensor5d,tensor6d:tensor6d,tile:tile,topk:topk,truncatedNormal:truncatedNormal,unique:unique,unsortedSegmentSum:unsortedSegmentSum,unstack:unstack,variable:variable,where:where,whereAsync:whereAsync,zeros:zeros,zerosLike:zerosLike,op:op,OP_SCOPE_SUFFIX:OP_SCOPE_SUFFIX,booleanMaskAsync:booleanMaskAsync,transpose:transpose,norm:norm,movingAverage:movingAverage,scatterND:scatterND,sparseToDense:sparseToDense,gatherND:gatherND,dropout:dropout,enclosingPowerOfTwo:enclosingPowerOfTwo,cosineWindow:cosineWindow,inTopKAsync:inTopKAsync,image:image,linalg:linalg,losses:losses,spectral:spectral,fused:fused_ops,signal:signal,sparse:sparse,string:string};var executeOp$j=function(node,tensorMap,context){switch(node.op){case"BiasAdd":case"AddV2":case"Add":{return[add(getParamValue("a",node,tensorMap,context),getParamValue("b",node,tensorMap,context))]}case"AddN":{return[addN(getParamValue("tensors",node,tensorMap,context))]}case"FloorMod":case"Mod":return[mod(getParamValue("a",node,tensorMap,context),getParamValue("b",node,tensorMap,context))];case"Mul":return[mul(getParamValue("a",node,tensorMap,context),getParamValue("b",node,tensorMap,context))];case"RealDiv":case"Div":{return[div(getParamValue("a",node,tensorMap,context),getParamValue("b",node,tensorMap,context))]}case"DivNoNan":{return[divNoNan(getParamValue("a",node,tensorMap,context),getParamValue("b",node,tensorMap,context))]}case"FloorDiv":{return[floorDiv(getParamValue("a",node,tensorMap,context),getParamValue("b",node,tensorMap,context))]}case"Sub":{return[sub(getParamValue("a",node,tensorMap,context),getParamValue("b",node,tensorMap,context))]}case"Minimum":{return[minimum(getParamValue("a",node,tensorMap,context),getParamValue("b",node,tensorMap,context))]}case"Maximum":{return[maximum(getParamValue("a",node,tensorMap,context),getParamValue("b",node,tensorMap,context))]}case"Pow":{return[pow(getParamValue("a",node,tensorMap,context),getParamValue("b",node,tensorMap,context))]}case"SquaredDifference":{return[squaredDifference(getParamValue("a",node,tensorMap,context),getParamValue("b",node,tensorMap,context))]}default:throw TypeError("Node type "+node.op+" is not implemented")}};var executeOp$i=function(node,tensorMap,context){switch(node.op){case"Abs":case"ComplexAbs":return[abs(getParamValue("x",node,tensorMap,context))];case"Acos":return[acos(getParamValue("x",node,tensorMap,context))];case"Acosh":return[acosh(getParamValue("x",node,tensorMap,context))];case"Asin":return[asin(getParamValue("x",node,tensorMap,context))];case"Asinh":return[asinh(getParamValue("x",node,tensorMap,context))];case"Atan":return[atan(getParamValue("x",node,tensorMap,context))];case"Atan2":return[atan2(getParamValue("x",node,tensorMap,context),getParamValue("y",node,tensorMap,context))];case"Atanh":return[atanh(getParamValue("x",node,tensorMap,context))];case"Ceil":return[ceil(getParamValue("x",node,tensorMap,context))];case"Complex":return[complex(getParamValue("real",node,tensorMap,context),getParamValue("imag",node,tensorMap,context))];case"Cos":return[cos(getParamValue("x",node,tensorMap,context))];case"Cosh":return[cosh(getParamValue("x",node,tensorMap,context))];case"Elu":return[elu(getParamValue("x",node,tensorMap,context))];case"Erf":return[erf(getParamValue("x",node,tensorMap,context))];case"Exp":return[exp(getParamValue("x",node,tensorMap,context))];case"Expm1":{return[expm1(getParamValue("x",node,tensorMap,context))]}case"Floor":return[floor(getParamValue("x",node,tensorMap,context))];case"Log":return[log(getParamValue("x",node,tensorMap,context))];case"Log1p":{return[log1p(getParamValue("x",node,tensorMap,context))]}case"Imag":return[imag(getParamValue("x",node,tensorMap,context))];case"Neg":return[neg(getParamValue("x",node,tensorMap,context))];case"Reciprocal":{return[reciprocal(getParamValue("x",node,tensorMap,context))]}case"Real":return[real(getParamValue("x",node,tensorMap,context))];case"Relu":return[relu(getParamValue("x",node,tensorMap,context))];case"Round":{return[round(getParamValue("x",node,tensorMap,context))]}case"Selu":return[selu(getParamValue("x",node,tensorMap,context))];case"Sigmoid":return[sigmoid(getParamValue("x",node,tensorMap,context))];case"Sin":return[sin(getParamValue("x",node,tensorMap,context))];case"Sign":{return[sign(getParamValue("x",node,tensorMap,context))]}case"Sinh":{return[sinh(getParamValue("x",node,tensorMap,context))]}case"Softplus":{return[softplus(getParamValue("x",node,tensorMap,context))]}case"Sqrt":{return[sqrt(getParamValue("x",node,tensorMap,context))]}case"Square":{return[square(getParamValue("x",node,tensorMap,context))]}case"Tanh":{return[tanh(getParamValue("x",node,tensorMap,context))]}case"Tan":return[tan(getParamValue("x",node,tensorMap,context))];case"ClipByValue":return[clipByValue(getParamValue("x",node,tensorMap,context),getParamValue("clipValueMin",node,tensorMap,context),getParamValue("clipValueMax",node,tensorMap,context))];case"Relu6":return[relu6(getParamValue("x",node,tensorMap,context))];case"Rsqrt":return[rsqrt(getTensor(node.inputNames[0],tensorMap,context))];case"Prod":return[prod(getParamValue("x",node,tensorMap,context),getParamValue("axes",node,tensorMap,context))];case"LeakyRelu":return[leakyRelu(getParamValue("x",node,tensorMap,context),getParamValue("alpha",node,tensorMap,context))];case"Prelu":return[prelu(getParamValue("x",node,tensorMap,context),getParamValue("alpha",node,tensorMap,context))];case"IsNan":return[isNaN$1(getTensor(node.inputNames[0],tensorMap,context))];default:throw TypeError("Node type "+node.op+" is not implemented")}};function assertShapesMatchAllowUndefinedSize(shapeA,shapeB,errorMessagePrefix){if(errorMessagePrefix===void 0){errorMessagePrefix=""}if(typeof shapeA==="number"||typeof shapeB==="number"){return}tfc.util.assert(shapeA.length===shapeB.length,function(){return errorMessagePrefix+(" Shapes "+shapeA+" and "+shapeB+" must match")});for(var i=0;i<shapeA.length;i++){var dim0=shapeA[i];var dim1=shapeB[i];tfc.util.assert(dim0<0||dim1<0||dim0===dim1,function(){return errorMessagePrefix+(" Shapes "+shapeA+" and "+shapeB+" must match")})}}function fullDefinedShape(elementShape){if(typeof elementShape==="number"||elementShape.some(function(dim){return dim<0})){return false}return true}function inferElementShape(listElementShape,tensors,elementShape){var partialShape=mergeElementShape(listElementShape,elementShape);var notfullDefinedShape=!fullDefinedShape(partialShape);if(notfullDefinedShape&&tensors.length===0){throw new Error("Tried to calculate elements of an empty list"+(" with non-fully-defined elementShape: "+partialShape))}if(notfullDefinedShape){tensors.forEach(function(tensor){partialShape=mergeElementShape(tensor.shape,partialShape)})}if(!fullDefinedShape(partialShape)){throw new Error("Non-fully-defined elementShape: "+partialShape)}return partialShape}function mergeElementShape(elementShapeA,elementShapeB){if(typeof elementShapeA==="number"){return elementShapeB}if(typeof elementShapeB==="number"){return elementShapeA}if(elementShapeA.length!==elementShapeB.length){throw new Error("Incompatible ranks during merge: "+elementShapeA+" vs. "+elementShapeB)}var result=[];for(var i=0;i<elementShapeA.length;++i){var dim0=elementShapeA[i];var dim1=elementShapeB[i];if(dim0>=0&&dim1>=0&&dim0!==dim1){throw new Error("Incompatible shape during merge: "+elementShapeA+" vs. "+elementShapeB)}result[i]=dim0>=0?dim0:dim1}return result}var TensorArray=function(){function TensorArray(name,dtype,maxSize,elementShape,identicalElementShapes,dynamicSize,clearAfterRead){this.name=name;this.dtype=dtype;this.maxSize=maxSize;this.elementShape=elementShape;this.identicalElementShapes=identicalElementShapes;this.dynamicSize=dynamicSize;this.clearAfterRead=clearAfterRead;this.tensors=[];this.closed_=false;this.idTensor=tfc.scalar(0);tfc.keep(this.idTensor)}Object.defineProperty(TensorArray.prototype,"id",{get:function(){return this.idTensor.id},enumerable:true,configurable:true});Object.defineProperty(TensorArray.prototype,"closed",{get:function(){return this.closed_},enumerable:true,configurable:true});TensorArray.prototype.clearAndClose=function(keepIds){this.tensors.forEach(function(tensor){if(keepIds==null||!keepIds.has(tensor.tensor.id)){tensor.tensor.dispose()}});this.tensors=[];this.closed_=true;this.idTensor.dispose()};TensorArray.prototype.size=function(){return this.tensors.length};TensorArray.prototype.read=function(index){if(this.closed_){throw new Error("TensorArray "+this.name+" has already been closed.")}if(index<0||index>=this.size()){throw new Error("Tried to read from index "+index+", but array size is: "+this.size())}var tensorWithState=this.tensors[index];if(tensorWithState.cleared){throw new Error("TensorArray "+this.name+": Could not read index "+index+" twice because it was cleared after a previous read "+"(perhaps try setting clear_after_read = false?).")}if(this.clearAfterRead){tensorWithState.cleared=true}tensorWithState.read=true;return tensorWithState.tensor};TensorArray.prototype.readMany=function(indices){var _this=this;return indices.map(function(index){return _this.read(index)})};TensorArray.prototype.write=function(index,tensor){if(this.closed_){throw new Error("TensorArray "+this.name+" has already been closed.")}if(index<0||!this.dynamicSize&&index>=this.maxSize){throw new Error("Tried to write to index "+index+", but array is not resizeable and size is: "+this.maxSize)}var t=this.tensors[index]||{};if(tensor.dtype!==this.dtype){throw new Error("TensorArray "+this.name+": Could not write to TensorArray index "+index+",\n          because the value dtype is "+tensor.dtype+", but TensorArray dtype is "+this.dtype+".")}if(this.size()===0&&(this.elementShape==null||this.elementShape.length===0)){this.elementShape=tensor.shape}assertShapesMatchAllowUndefinedSize(this.elementShape,tensor.shape,"TensorArray "+this.name+": Could not write to TensorArray index "+index+".");if(t.read){throw new Error("TensorArray "+this.name+": Could not write to TensorArray index "+index+", because it has already been read.")}if(t.written){throw new Error("TensorArray "+this.name+": Could not write to TensorArray index "+index+", because it has already been written.")}t.tensor=tensor;tfc.keep(tensor);t.written=true;this.tensors[index]=t};TensorArray.prototype.writeMany=function(indices,tensors){var _this=this;if(indices.length!==tensors.length){throw new Error("TensorArray "+this.name+": could not write multiple tensors,"+("because the index size: "+indices.length+" is not the same as tensors size: "+tensors.length+"."))}indices.forEach(function(i,index){return _this.write(i,tensors[index])})};TensorArray.prototype.gather=function(indices,dtype){if(!!dtype&&dtype!==this.dtype){throw new Error("TensorArray dtype is "+this.dtype+" but gather requested dtype "+dtype)}if(!indices){indices=[];for(var i=0;i<this.size();i++){indices.push(i)}}else{indices=indices.slice(0,this.size())}if(indices.length===0){return tfc.tensor([],[0].concat(this.elementShape))}var tensors=this.readMany(indices);assertShapesMatchAllowUndefinedSize(this.elementShape,tensors[0].shape,"TensorArray shape mismatch: ");return tfc.stack(tensors,0)};TensorArray.prototype.concat=function(dtype){if(!!dtype&&dtype!==this.dtype){throw new Error("TensorArray dtype is "+this.dtype+" but concat requested dtype "+dtype)}if(this.size()===0){return tfc.tensor([],[0].concat(this.elementShape))}var indices=[];for(var i=0;i<this.size();i++){indices.push(i)}var tensors=this.readMany(indices);assertShapesMatchAllowUndefinedSize(this.elementShape,tensors[0].shape,"TensorArray shape mismatch: tensor array shape ("+this.elementShape+") vs first tensor shape ("+tensors[0].shape+")");return tfc.concat(tensors,0)};TensorArray.prototype.scatter=function(indices,tensor){if(tensor.dtype!==this.dtype){throw new Error("TensorArray dtype is "+this.dtype+" but tensor has dtype "+tensor.dtype)}if(indices.length!==tensor.shape[0]){throw new Error("Expected len(indices) == tensor.shape[0], but saw: "+indices.length+" vs. "+tensor.shape[0])}var maxIndex=Math.max.apply(Math,__spread(indices));if(!this.dynamicSize&&maxIndex>=this.maxSize){throw new Error("Max index must be < array size ("+maxIndex+"  vs. "+this.maxSize+")")}this.writeMany(indices,tfc.unstack(tensor,0))};TensorArray.prototype.split=function(length,tensor){var _this=this;if(tensor.dtype!==this.dtype){throw new Error("TensorArray dtype is "+this.dtype+" but tensor has dtype "+tensor.dtype)}var totalLength=0;var cumulativeLengths=length.map(function(len){totalLength+=len;return totalLength});if(totalLength!==tensor.shape[0]){throw new Error("Expected sum of lengths to be equal to\n          tensor.shape[0], but sum of lengths is\n        "+totalLength+", and tensor's shape is: "+tensor.shape)}if(!this.dynamicSize&&length.length!==this.maxSize){throw new Error("TensorArray's size is not equal to the size of lengths ("+this.maxSize+" vs. "+length.length+"), "+"and the TensorArray is not marked as dynamically resizeable")}var elementPerRow=totalLength===0?0:tensor.size/totalLength;var tensors=[];tfc.tidy(function(){tensor=tfc.reshape(tensor,[1,totalLength,elementPerRow]);for(var i=0;i<length.length;++i){var previousLength=i===0?0:cumulativeLengths[i-1];var indices_1=[0,previousLength,0];var sizes=[1,length[i],elementPerRow];tensors[i]=tfc.reshape(tfc.slice(tensor,indices_1,sizes),_this.elementShape)}return tensors});var indices=[];for(var i=0;i<length.length;i++){indices[i]=i}this.writeMany(indices,tensors)};return TensorArray}();var TensorList=function(){function TensorList(tensors,elementShape,elementDtype,maxNumElements){if(maxNumElements===void 0){maxNumElements=-1}this.tensors=tensors;this.elementShape=elementShape;this.elementDtype=elementDtype;if(tensors!=null){tensors.forEach(function(tensor){if(elementDtype!==tensor.dtype){throw new Error("Invalid data types; op elements "+elementDtype+", but list elements "+tensor.dtype)}assertShapesMatchAllowUndefinedSize(elementShape,tensor.shape,"TensorList shape mismatch: ");tfc.keep(tensor)})}this.idTensor=tfc.scalar(0);this.maxNumElements=maxNumElements;tfc.keep(this.idTensor)}Object.defineProperty(TensorList.prototype,"id",{get:function(){return this.idTensor.id},enumerable:true,configurable:true});TensorList.prototype.copy=function(){return new TensorList(__spread(this.tensors),this.elementShape,this.elementDtype)};TensorList.prototype.clearAndClose=function(keepIds){this.tensors.forEach(function(tensor){if(keepIds==null||!keepIds.has(tensor.id)){tensor.dispose()}});this.tensors.length=0;this.idTensor.dispose()};TensorList.prototype.size=function(){return this.tensors.length};TensorList.prototype.stack=function(elementShape,elementDtype,numElements){var _this=this;if(numElements===void 0){numElements=-1}if(elementDtype!==this.elementDtype){throw new Error("Invalid data types; op elements "+elementDtype+", but list elements "+this.elementDtype)}if(numElements!==-1&&this.tensors.length!==numElements){throw new Error("Operation expected a list with "+numElements+" elements but got a list with "+this.tensors.length+" elements.")}assertShapesMatchAllowUndefinedSize(elementShape,this.elementShape,"TensorList shape mismatch: ");var outputElementShape=inferElementShape(this.elementShape,this.tensors,elementShape);return tfc.tidy(function(){var reshapedTensors=_this.tensors.map(function(tensor){return tfc.reshape(tensor,outputElementShape)});return tfc.stack(reshapedTensors,0)})};TensorList.prototype.popBack=function(elementShape,elementDtype){if(elementDtype!==this.elementDtype){throw new Error("Invalid data types; op elements "+elementDtype+", but list elements "+this.elementDtype)}if(this.size()===0){throw new Error("Trying to pop from an empty list.")}var outputElementShape=inferElementShape(this.elementShape,this.tensors,elementShape);var tensor=this.tensors.pop();assertShapesMatchAllowUndefinedSize(tensor.shape,elementShape,"TensorList shape mismatch: ");return tfc.reshape(tensor,outputElementShape)};TensorList.prototype.pushBack=function(tensor){if(tensor.dtype!==this.elementDtype){throw new Error("Invalid data types; op elements "+tensor.dtype+", but list elements "+this.elementDtype)}assertShapesMatchAllowUndefinedSize(tensor.shape,this.elementShape,"TensorList shape mismatch: ");if(this.maxNumElements===this.size()){throw new Error("Trying to push element into a full list.")}tfc.keep(tensor);this.tensors.push(tensor)};TensorList.prototype.resize=function(size){if(size<0){throw new Error("TensorListResize expects size to be non-negative. Got: "+size)}if(this.maxNumElements!==-1&&size>this.maxNumElements){throw new Error("TensorListResize input size "+size+" is greater maxNumElement "+this.maxNumElements+".")}this.tensors.length=size};TensorList.prototype.getItem=function(elementIndex,elementShape,elementDtype){if(elementDtype!==this.elementDtype){throw new Error("Invalid data types; op elements "+elementDtype+", but list elements "+this.elementDtype)}if(elementIndex<0||elementIndex>this.tensors.length){throw new Error("Trying to access element "+elementIndex+" in a list with "+this.tensors.length+" elements.")}if(this.tensors[elementIndex]==null){throw new Error("element at index "+elementIndex+" is null.")}assertShapesMatchAllowUndefinedSize(this.tensors[elementIndex].shape,elementShape,"TensorList shape mismatch: ");var outputElementShape=inferElementShape(this.elementShape,this.tensors,elementShape);return tfc.reshape(this.tensors[elementIndex],outputElementShape)};TensorList.prototype.setItem=function(elementIndex,tensor){if(tensor.dtype!==this.elementDtype){throw new Error("Invalid data types; op elements "+tensor.dtype+", but list elements "+this.elementDtype)}if(elementIndex<0||this.maxNumElements!==-1&&elementIndex>=this.maxNumElements){throw new Error("Trying to set element "+elementIndex+" in a list with max "+this.maxNumElements+" elements.")}assertShapesMatchAllowUndefinedSize(this.elementShape,tensor.shape,"TensorList shape mismatch: ");tfc.keep(tensor);this.tensors[elementIndex]=tensor};TensorList.prototype.gather=function(indices,elementDtype,elementShape){var _this=this;if(elementDtype!==this.elementDtype){throw new Error("Invalid data types; op elements "+elementDtype+", but list elements "+this.elementDtype)}assertShapesMatchAllowUndefinedSize(this.elementShape,elementShape,"TensorList shape mismatch: ");indices=indices.slice(0,this.size());var outputElementShape=inferElementShape(this.elementShape,this.tensors,elementShape);if(indices.length===0){return tfc.tensor([],[0].concat(outputElementShape))}return tfc.tidy(function(){var tensors=indices.map(function(i){return tfc.reshape(_this.tensors[i],outputElementShape)});return tfc.stack(tensors,0)})};TensorList.prototype.concat=function(elementDtype,elementShape){var _this=this;if(!!elementDtype&&elementDtype!==this.elementDtype){throw new Error("TensorList dtype is "+this.elementDtype+" but concat requested dtype "+elementDtype)}assertShapesMatchAllowUndefinedSize(this.elementShape,elementShape,"TensorList shape mismatch: ");var outputElementShape=inferElementShape(this.elementShape,this.tensors,elementShape);if(this.size()===0){return tfc.tensor([],[0].concat(outputElementShape))}return tfc.tidy(function(){var tensors=_this.tensors.map(function(t){return tfc.reshape(t,outputElementShape)});return tfc.concat(tensors,0)})};return TensorList}();function fromTensor(tensor,elementShape,elementDtype){var dtype=tensor.dtype;if(tensor.shape.length<1){throw new Error("Tensor must be at least a vector, but saw shape: "+tensor.shape)}if(tensor.dtype!==elementDtype){throw new Error("Invalid data types; op elements "+tensor.dtype+", but list elements "+elementDtype)}var tensorElementShape=tensor.shape.slice(1);assertShapesMatchAllowUndefinedSize(tensorElementShape,elementShape,"TensorList shape mismatch: ");var tensorList=tfc.unstack(tensor);return new TensorList(tensorList,elementShape,dtype)}function reserve(elementShape,elementDtype,numElements){return new TensorList([],elementShape,elementDtype,numElements)}function scatter(tensor,indices,elementShape,numElements){if(indices.length!==tensor.shape[0]){throw new Error("Expected len(indices) == tensor.shape[0], but saw: "+indices.length+" vs. "+tensor.shape[0])}var maxIndex=Math.max.apply(Math,__spread(indices));if(numElements!=null&&numElements!==-1&&maxIndex>=numElements){throw new Error("Max index must be < array size ("+maxIndex+"  vs. "+numElements+")")}var list=new TensorList([],elementShape,tensor.dtype,numElements);var tensors=tfc.unstack(tensor,0);indices.forEach(function(value,index){list.setItem(value,tensors[index])});return list}function split(tensor,length,elementShape){var totalLength=0;var cumulativeLengths=length.map(function(len){totalLength+=len;return totalLength});if(totalLength!==tensor.shape[0]){throw new Error("Expected sum of lengths to be equal to\n          tensor.shape[0], but sum of lengths is\n        "+totalLength+", and tensor's shape is: "+tensor.shape)}var shapeWithoutFirstDim=tensor.shape.slice(1);var outputElementShape=mergeElementShape(shapeWithoutFirstDim,elementShape);var elementPerRow=totalLength===0?0:tensor.size/totalLength;var tensors=tfc.tidy(function(){var tensors=[];tensor=tfc.reshape(tensor,[1,totalLength,elementPerRow]);for(var i=0;i<length.length;++i){var previousLength=i===0?0:cumulativeLengths[i-1];var indices=[0,previousLength,0];var sizes=[1,length[i],elementPerRow];tensors[i]=tfc.reshape(tfc.slice(tensor,indices,sizes),outputElementShape)}tensor.dispose();return tensors});var list=new TensorList([],elementShape,tensor.dtype,length.length);for(var i=0;i<tensors.length;i++){list.setItem(i,tensors[i])}return list}var _this$2=undefined;var executeOp$h=function(node,tensorMap,context){return __awaiter(_this$2,void 0,void 0,function(){var _a,thenFunc,elseFunc,cond,args,condValue,bodyFunc,condFunc,args,condResult,argIds_1,condValue,result,_loop_1,pred,pred,data,inputName,data,frameId,data,data,data,size,dtype,elementShape,dynamicSize,clearAfterRead,identicalElementShapes,name,tensorArray,id,index,writeTensor,writeTensorArray,readId,readIndex,readTensorArray,gatherId,gatherIndices,gatherDtype,gatherTensorArray,scatterId,scatterIndices,scatterTensor,scatterTensorArray,concatId,concatTensorArray,concatDtype,splitId,splitTensor,lengths,splitTensorArray,sizeId,sizeTensorArray,closeId,closeTensorArray,idTensor,index,writeTensor,tensorList,idTensor,readIndex,elementShape,elementDType,tensorList,scatterIndices,scatterTensor,elementShape,numElements,tensorList,elementShape,elementDtype,numElementsParam,numElements,tensorList,gatherId,gatherIndices,elementShape,elementDtype,tensorList,idTensor,elementShape,elementDtype,numElements,tensorList,tensor,elementShape,elementDtype,tensorList,concatId,tensorList,concatDtype,elementShape,idTensor,writeTensor,tensorList,idTensor,elementShape,elementDType,tensorList,splitTensor,elementShape,lengths,tensorList;return __generator(this,function(_b){switch(_b.label){case 0:_a=node.op;switch(_a){case"If":return[3,1];case"StatelessIf":return[3,1];case"While":return[3,3];case"StatelessWhile":return[3,3];case"LoopCond":return[3,9];case"Switch":return[3,10];case"Merge":return[3,12];case"Enter":return[3,13];case"Exit":return[3,14];case"NextIteration":return[3,15];case"TensorArrayV3":return[3,16];case"TensorArrayWriteV3":return[3,17];case"TensorArrayReadV3":return[3,18];case"TensorArrayGatherV3":return[3,19];case"TensorArrayScatterV3":return[3,20];case"TensorArrayConcatV3":return[3,21];case"TensorArraySplitV3":return[3,22];case"TensorArraySizeV3":return[3,23];case"TensorArrayCloseV3":return[3,24];case"TensorListSetItem":return[3,25];case"TensorListGetItem":return[3,26];case"TensorListScatterV2":return[3,27];case"TensorListScatter":return[3,27];case"TensorListReserve":return[3,28];case"EmptyTensorList":return[3,28];case"TensorListGather":return[3,29];case"TensorListStack":return[3,30];case"TensorListFromTensor":return[3,31];case"TensorListConcat":return[3,32];case"TensorListPushBack":return[3,33];case"TensorListPopBack":return[3,34];case"TensorListSplit":return[3,35]}return[3,36];case 1:thenFunc=getParamValue("thenBranch",node,tensorMap,context);elseFunc=getParamValue("elseBranch",node,tensorMap,context);cond=getParamValue("cond",node,tensorMap,context);args=getParamValue("args",node,tensorMap,context);return[4,cond.data()];case 2:condValue=_b.sent();if(condValue[0]){return[2,context.functionMap[thenFunc].executeFunctionAsync(args,context.tensorArrayMap,context.tensorListMap)]}else{return[2,context.functionMap[elseFunc].executeFunctionAsync(args,context.tensorArrayMap,context.tensorListMap)]}case 3:bodyFunc=getParamValue("body",node,tensorMap,context);condFunc=getParamValue("cond",node,tensorMap,context);args=getParamValue("args",node,tensorMap,context);return[4,context.functionMap[condFunc].executeFunctionAsync(args,context.tensorArrayMap,context.tensorListMap)];case 4:condResult=_b.sent();argIds_1=args.map(function(tensor){return tensor.id});return[4,condResult[0].data()];case 5:condValue=_b.sent();condResult.forEach(function(tensor){if(!tensor.kept&&argIds_1.indexOf(tensor.id)===-1){tensor.dispose()}});result=args;_loop_1=function(){var origResult,resultIds,condResult_1;return __generator(this,function(_a){switch(_a.label){case 0:origResult=result;return[4,context.functionMap[bodyFunc].executeFunctionAsync(result,context.tensorArrayMap,context.tensorListMap)];case 1:result=_a.sent();resultIds=result.map(function(tensor){return tensor.id});origResult.forEach(function(tensor){if(!tensor.kept&&argIds_1.indexOf(tensor.id)===-1&&resultIds.indexOf(tensor.id)===-1){tensor.dispose()}});return[4,context.functionMap[condFunc].executeFunctionAsync(result,context.tensorArrayMap,context.tensorListMap)];case 2:condResult_1=_a.sent();return[4,condResult_1[0].data()];case 3:condValue=_a.sent();condResult_1.forEach(function(tensor){if(!tensor.kept&&argIds_1.indexOf(tensor.id)===-1&&resultIds.indexOf(tensor.id)===-1){tensor.dispose()}});return[2]}})};_b.label=6;case 6:if(!condValue[0])return[3,8];return[5,_loop_1()];case 7:_b.sent();return[3,6];case 8:return[2,result];case 9:{pred=getParamValue("pred",node,tensorMap,context);return[2,[cloneTensor(pred)]]}case 10:pred=getParamValue("pred",node,tensorMap,context);data=getParamValue("data",node,tensorMap,context);if(!data.kept){data=cloneTensor(data)}return[4,pred.data()];case 11:return[2,_b.sent()[0]?[undefined,data]:[data,undefined]];case 12:{inputName=node.inputNames.find(function(name){return getTensor(name,tensorMap,context)!==undefined});if(inputName){data=getTensor(inputName,tensorMap,context);return[2,[cloneTensor(data)]]}return[2,undefined]}case 13:{frameId=getParamValue("frameName",node,tensorMap,context);data=getParamValue("tensor",node,tensorMap,context);context.enterFrame(frameId);return[2,[cloneTensor(data)]]}case 14:{data=getParamValue("tensor",node,tensorMap,context);context.exitFrame();return[2,[cloneTensor(data)]]}case 15:{data=getParamValue("tensor",node,tensorMap,context);context.nextIteration();return[2,[cloneTensor(data)]]}case 16:{size=getParamValue("size",node,tensorMap,context);dtype=getParamValue("dtype",node,tensorMap,context);elementShape=getParamValue("elementShape",node,tensorMap,context);dynamicSize=getParamValue("dynamicSize",node,tensorMap,context);clearAfterRead=getParamValue("clearAfterRead",node,tensorMap,context);identicalElementShapes=getParamValue("identicalElementShapes",node,tensorMap,context);name=getParamValue("name",node,tensorMap,context);tensorArray=new TensorArray(name,dtype,size,elementShape,identicalElementShapes,dynamicSize,clearAfterRead);context.addTensorArray(tensorArray);return[2,[tensorArray.idTensor,tfc.scalar(1)]]}case 17:{id=getParamValue("tensorArrayId",node,tensorMap,context);index=getParamValue("index",node,tensorMap,context);writeTensor=getParamValue("tensor",node,tensorMap,context);writeTensorArray=context.getTensorArray(id.id);writeTensorArray.write(index,writeTensor);return[2,[writeTensorArray.idTensor]]}case 18:{readId=getParamValue("tensorArrayId",node,tensorMap,context);readIndex=getParamValue("index",node,tensorMap,context);readTensorArray=context.getTensorArray(readId.id);return[2,[readTensorArray.read(readIndex)]]}case 19:{gatherId=getParamValue("tensorArrayId",node,tensorMap,context);gatherIndices=getParamValue("indices",node,tensorMap,context);gatherDtype=getParamValue("dtype",node,tensorMap,context);gatherTensorArray=context.getTensorArray(gatherId.id);return[2,[gatherTensorArray.gather(gatherIndices,gatherDtype)]]}case 20:{scatterId=getParamValue("tensorArrayId",node,tensorMap,context);scatterIndices=getParamValue("indices",node,tensorMap,context);scatterTensor=getParamValue("tensor",node,tensorMap,context);scatterTensorArray=context.getTensorArray(scatterId.id);scatterTensorArray.scatter(scatterIndices,scatterTensor);return[2,[scatterTensorArray.idTensor]]}case 21:{concatId=getParamValue("tensorArrayId",node,tensorMap,context);concatTensorArray=context.getTensorArray(concatId.id);concatDtype=getParamValue("dtype",node,tensorMap,context);return[2,[concatTensorArray.concat(concatDtype)]]}case 22:{splitId=getParamValue("tensorArrayId",node,tensorMap,context);splitTensor=getParamValue("tensor",node,tensorMap,context);lengths=getParamValue("lengths",node,tensorMap,context);splitTensorArray=context.getTensorArray(splitId.id);splitTensorArray.split(lengths,splitTensor);return[2,[splitTensorArray.idTensor]]}case 23:{sizeId=getParamValue("tensorArrayId",node,tensorMap,context);sizeTensorArray=context.getTensorArray(sizeId.id);return[2,[tfc.scalar(sizeTensorArray.size(),"int32")]]}case 24:{closeId=getParamValue("tensorArrayId",node,tensorMap,context);closeTensorArray=context.getTensorArray(closeId.id);closeTensorArray.clearAndClose();return[2,[closeTensorArray.idTensor]]}case 25:{idTensor=getParamValue("tensorListId",node,tensorMap,context);index=getParamValue("index",node,tensorMap,context);writeTensor=getParamValue("tensor",node,tensorMap,context);tensorList=context.getTensorList(idTensor.id);tensorList.setItem(index,writeTensor);return[2,[tensorList.idTensor]]}case 26:{idTensor=getParamValue("tensorListId",node,tensorMap,context);readIndex=getParamValue("index",node,tensorMap,context);elementShape=getParamValue("elementShape",node,tensorMap,context);elementDType=getParamValue("elementDType",node,tensorMap,context);tensorList=context.getTensorList(idTensor.id);return[2,[tensorList.getItem(readIndex,elementShape,elementDType)]]}case 27:{scatterIndices=getParamValue("indices",node,tensorMap,context);scatterTensor=getParamValue("tensor",node,tensorMap,context);elementShape=getParamValue("elementShape",node,tensorMap,context);numElements=getParamValue("numElements",node,tensorMap,context);tensorList=scatter(scatterTensor,scatterIndices,elementShape,numElements);context.addTensorList(tensorList);return[2,[tensorList.idTensor]]}case 28:{elementShape=getParamValue("elementShape",node,tensorMap,context);elementDtype=getParamValue("elementDType",node,tensorMap,context);numElementsParam=void 0;if(node.op==="TensorListReserve"){numElementsParam="numElements"}else{numElementsParam="maxNumElements"}numElements=getParamValue(numElementsParam,node,tensorMap,context);tensorList=reserve(elementShape,elementDtype,numElements);context.addTensorList(tensorList);return[2,[tensorList.idTensor]]}case 29:{gatherId=getParamValue("tensorListId",node,tensorMap,context);gatherIndices=getParamValue("indices",node,tensorMap,context);elementShape=getParamValue("elementShape",node,tensorMap,context);elementDtype=getParamValue("elementDType",node,tensorMap,context);tensorList=context.getTensorList(gatherId.id);return[2,[tensorList.gather(gatherIndices,elementDtype,elementShape)]]}case 30:{idTensor=getParamValue("tensorListId",node,tensorMap,context);elementShape=getParamValue("elementShape",node,tensorMap,context);elementDtype=getParamValue("elementDType",node,tensorMap,context);numElements=getParamValue("numElements",node,tensorMap,context);tensorList=context.getTensorList(idTensor.id);return[2,[tensorList.stack(elementShape,elementDtype,numElements)]]}case 31:{tensor=getParamValue("tensor",node,tensorMap,context);elementShape=getParamValue("elementShape",node,tensorMap,context);elementDtype=getParamValue("elementDType",node,tensorMap,context);tensorList=fromTensor(tensor,elementShape,elementDtype);context.addTensorList(tensorList);return[2,[tensorList.idTensor]]}case 32:{concatId=getParamValue("tensorListId",node,tensorMap,context);tensorList=context.getTensorList(concatId.id);concatDtype=getParamValue("dtype",node,tensorMap,context);elementShape=getParamValue("elementShape",node,tensorMap,context);return[2,[tensorList.concat(concatDtype,elementShape)]]}case 33:{idTensor=getParamValue("tensorListId",node,tensorMap,context);writeTensor=getParamValue("tensor",node,tensorMap,context);tensorList=context.getTensorList(idTensor.id);tensorList.pushBack(writeTensor);return[2,[tensorList.idTensor]]}case 34:{idTensor=getParamValue("tensorListId",node,tensorMap,context);elementShape=getParamValue("elementShape",node,tensorMap,context);elementDType=getParamValue("elementDType",node,tensorMap,context);tensorList=context.getTensorList(idTensor.id);return[2,[tensorList.popBack(elementShape,elementDType)]]}case 35:{splitTensor=getParamValue("tensor",node,tensorMap,context);elementShape=getParamValue("elementShape",node,tensorMap,context);lengths=getParamValue("lengths",node,tensorMap,context);tensorList=split(splitTensor,lengths,elementShape);context.addTensorList(tensorList);return[2,[tensorList.idTensor]]}case 36:throw TypeError("Node type "+node.op+" is not implemented")}})})};function fusedConvAndDepthWiseParams(node,tensorMap,context){var _a=__read(getParamValue("fusedOps",node,tensorMap,context),2),extraOp=_a[0],activationFunc=_a[1];var isBiasAdd=extraOp==="biasadd";var noBiasAdd=!isBiasAdd;var isPrelu=activationFunc==="prelu";var isBatchNorm=extraOp==="fusedbatchnorm";var numArgs=getParamValue("numArgs",node,tensorMap,context);if(isBiasAdd){if(isPrelu&&numArgs!==2){throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu "+"must have two extra arguments: bias and alpha.")}if(!isPrelu&&isBiasAdd&&numArgs!==1){throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd must have "+"one extra argument: bias.")}}if(isBatchNorm){throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported")}var stride=getParamValue("strides",node,tensorMap,context);var pad=getPadding(node,tensorMap,context);var dataFormat=getParamValue("dataFormat",node,tensorMap,context).toUpperCase();var dilations=getParamValue("dilations",node,tensorMap,context);var _b=__read(getParamValue("args",node,tensorMap,context),2),biasArg=_b[0],preluArg=_b[1];if(noBiasAdd){preluArg=biasArg;biasArg=undefined}var leakyreluAlpha=getParamValue("leakyreluAlpha",node,tensorMap,context);return{stride:stride,pad:pad,dataFormat:dataFormat,dilations:dilations,biasArg:biasArg,preluArg:preluArg,activationFunc:activationFunc,leakyreluAlpha:leakyreluAlpha}}var executeOp$g=function(node,tensorMap,context){switch(node.op){case"Conv1D":{var stride=getParamValue("stride",node,tensorMap,context);var pad=getParamValue("pad",node,tensorMap,context);var dataFormat=getParamValue("dataFormat",node,tensorMap,context).toUpperCase();var dilation=getParamValue("dilation",node,tensorMap,context);return[conv1d(getParamValue("x",node,tensorMap,context),getParamValue("filter",node,tensorMap,context),stride,pad,dataFormat,dilation)]}case"Conv2D":{var stride=getParamValue("strides",node,tensorMap,context);var pad=getPadding(node,tensorMap,context);var dataFormat=getParamValue("dataFormat",node,tensorMap,context).toUpperCase();var dilations=getParamValue("dilations",node,tensorMap,context);return[conv2d$1(getParamValue("x",node,tensorMap,context),getParamValue("filter",node,tensorMap,context),[stride[1],stride[2]],pad,dataFormat,[dilations[1],dilations[2]])]}case"_FusedConv2D":{var _a=fusedConvAndDepthWiseParams(node,tensorMap,context),stride=_a.stride,pad=_a.pad,dataFormat=_a.dataFormat,dilations=_a.dilations,biasArg=_a.biasArg,preluArg=_a.preluArg,activationFunc=_a.activationFunc,leakyreluAlpha=_a.leakyreluAlpha;return[conv2d({x:getParamValue("x",node,tensorMap,context),filter:getParamValue("filter",node,tensorMap,context),strides:[stride[1],stride[2]],pad:pad,dataFormat:dataFormat,dilations:[dilations[1],dilations[2]],bias:biasArg,activation:activationFunc,preluActivationWeights:preluArg,leakyreluAlpha:leakyreluAlpha})]}case"FusedDepthwiseConv2dNative":{var _b=fusedConvAndDepthWiseParams(node,tensorMap,context),stride=_b.stride,pad=_b.pad,dataFormat=_b.dataFormat,dilations=_b.dilations,biasArg=_b.biasArg,preluArg=_b.preluArg,activationFunc=_b.activationFunc,leakyreluAlpha=_b.leakyreluAlpha;return[depthwiseConv2d({x:getParamValue("x",node,tensorMap,context),filter:getParamValue("filter",node,tensorMap,context),strides:[stride[1],stride[2]],pad:pad,dataFormat:dataFormat,dilations:[dilations[1],dilations[2]],bias:biasArg,activation:activationFunc,preluActivationWeights:preluArg,leakyreluAlpha:leakyreluAlpha})]}case"Conv2DBackpropInput":case"Conv2dTranspose":{var shape=getParamValue("outputShape",node,tensorMap,context);var stride=getParamValue("strides",node,tensorMap,context);var pad=getPadding(node,tensorMap,context);return[conv2dTranspose(getParamValue("x",node,tensorMap,context),getParamValue("filter",node,tensorMap,context),shape,[stride[1],stride[2]],pad)]}case"DepthwiseConv2dNative":case"DepthwiseConv2d":{var stride=getParamValue("strides",node,tensorMap,context);var pad=getPadding(node,tensorMap,context);var dilations=getParamValue("dilations",node,tensorMap,context);var dataFormat=getParamValue("dataFormat",node,tensorMap,context).toUpperCase();return[depthwiseConv2d$1(getParamValue("input",node,tensorMap,context),getParamValue("filter",node,tensorMap,context),[stride[1],stride[2]],pad,dataFormat,[dilations[1],dilations[2]])]}case"Conv3D":{var stride=getParamValue("strides",node,tensorMap,context);var pad=getParamValue("pad",node,tensorMap,context);var dataFormat=getParamValue("dataFormat",node,tensorMap,context).toUpperCase();var dilations=getParamValue("dilations",node,tensorMap,context);return[conv3d(getParamValue("x",node,tensorMap,context),getParamValue("filter",node,tensorMap,context),[stride[1],stride[2],stride[3]],pad,dataFormat,[dilations[1],dilations[2],dilations[3]])]}case"AvgPool":{var stride=getParamValue("strides",node,tensorMap,context);var pad=getParamValue("pad",node,tensorMap,context);var kernelSize=getParamValue("kernelSize",node,tensorMap,context);return[avgPool(getParamValue("x",node,tensorMap,context),[kernelSize[1],kernelSize[2]],[stride[1],stride[2]],pad)]}case"MaxPool":{var stride=getParamValue("strides",node,tensorMap,context);var pad=getParamValue("pad",node,tensorMap,context);var kernelSize=getParamValue("kernelSize",node,tensorMap,context);return[maxPool(getParamValue("x",node,tensorMap,context),[kernelSize[1],kernelSize[2]],[stride[1],stride[2]],pad)]}case"MaxPoolWithArgmax":{var stride=getParamValue("strides",node,tensorMap,context);var pad=getParamValue("pad",node,tensorMap,context);var kernelSize=getParamValue("kernelSize",node,tensorMap,context);var includeBatchInIndex=getParamValue("includeBatchInIndex",node,tensorMap,context);var _c=maxPoolWithArgmax(getParamValue("x",node,tensorMap,context),[kernelSize[1],kernelSize[2]],[stride[1],stride[2]],pad,includeBatchInIndex),result=_c.result,indexes=_c.indexes;return[result,indexes]}case"AvgPool3D":{var stride=getParamValue("strides",node,tensorMap,context);var pad=getParamValue("pad",node,tensorMap,context);var kernelSize=getParamValue("kernelSize",node,tensorMap,context);return[avgPool3d(getParamValue("x",node,tensorMap,context),[kernelSize[1],kernelSize[2],kernelSize[3]],[stride[1],stride[2],stride[3]],pad)]}case"MaxPool3D":{var stride=getParamValue("strides",node,tensorMap,context);var pad=getParamValue("pad",node,tensorMap,context);var kernelSize=getParamValue("kernelSize",node,tensorMap,context);return[maxPool3d(getParamValue("x",node,tensorMap,context),[kernelSize[1],kernelSize[2],kernelSize[3]],[stride[1],stride[2],stride[3]],pad)]}case"Dilation2D":{var strides=getParamValue("strides",node,tensorMap,context);var pad=getParamValue("pad",node,tensorMap,context);var dilations=getParamValue("dilations",node,tensorMap,context);var strideHeight=strides[1];var strideWidth=strides[2];var dilationHeight=dilations[1];var dilationWidth=dilations[2];return[dilation2d(getParamValue("x",node,tensorMap,context),getParamValue("filter",node,tensorMap,context),[strideHeight,strideWidth],pad,[dilationHeight,dilationWidth],"NHWC")]}default:throw TypeError("Node type "+node.op+" is not implemented")}};var executeOp$f=function(node,tensorMap,context){switch(node.op){case"Fill":{var shape=getParamValue("shape",node,tensorMap,context);var dtype=getParamValue("dtype",node,tensorMap,context);var value=getParamValue("value",node,tensorMap,context);return[fill(shape,value,dtype)]}case"LinSpace":{var start=getParamValue("start",node,tensorMap,context);var stop=getParamValue("stop",node,tensorMap,context);var num=getParamValue("num",node,tensorMap,context);return[linspace(start,stop,num)]}case"Multinomial":{var logits=getParamValue("logits",node,tensorMap,context);var numSamples=getParamValue("numSamples",node,tensorMap,context);var seed=getParamValue("seed",node,tensorMap,context);return[multinomial(logits,numSamples,seed)]}case"OneHot":{var indices=getParamValue("indices",node,tensorMap,context);var depth=getParamValue("depth",node,tensorMap,context);var onValue=getParamValue("onValue",node,tensorMap,context);var offValue=getParamValue("offValue",node,tensorMap,context);return[oneHot(indices,depth,onValue,offValue)]}case"Ones":{return[ones(getParamValue("shape",node,tensorMap,context),getParamValue("dtype",node,tensorMap,context))]}case"OnesLike":{return[onesLike(getParamValue("x",node,tensorMap,context))]}case"RandomUniform":{return[randomUniform(getParamValue("shape",node,tensorMap,context),getParamValue("minval",node,tensorMap,context),getParamValue("maxval",node,tensorMap,context),getParamValue("dtype",node,tensorMap,context))]}case"Range":{var start=getParamValue("start",node,tensorMap,context);var stop=getParamValue("stop",node,tensorMap,context);var step=getParamValue("step",node,tensorMap,context);return[range(start,stop,step,getParamValue("dtype",node,tensorMap,context))]}case"TruncatedNormal":{var shape=getParamValue("shape",node,tensorMap,context);var mean=getParamValue("mean",node,tensorMap,context);var stdDev=getParamValue("stdDev",node,tensorMap,context);var seed=getParamValue("seed",node,tensorMap,context);return[truncatedNormal(shape,mean,stdDev,getParamValue("dtype",node,tensorMap,context),seed)]}case"Zeros":{return[zeros(getParamValue("shape",node,tensorMap,context),getParamValue("dtype",node,tensorMap,context))]}case"ZerosLike":{return[zerosLike(getParamValue("x",node,tensorMap,context))]}default:throw TypeError("Node type "+node.op+" is not implemented")}};var _this$1=undefined;function nmsParams(node,tensorMap,context){var boxes=getParamValue("boxes",node,tensorMap,context);var scores=getParamValue("scores",node,tensorMap,context);var maxOutputSize=getParamValue("maxOutputSize",node,tensorMap,context);var iouThreshold=getParamValue("iouThreshold",node,tensorMap,context);var scoreThreshold=getParamValue("scoreThreshold",node,tensorMap,context);var softNmsSigma=getParamValue("softNmsSigma",node,tensorMap,context);return{boxes:boxes,scores:scores,maxOutputSize:maxOutputSize,iouThreshold:iouThreshold,scoreThreshold:scoreThreshold,softNmsSigma:softNmsSigma}}var executeOp$e=function(node,tensorMap,context){return __awaiter(_this$1,void 0,void 0,function(){var _a,_b,boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,softNmsSigma,result,_c,boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,padToMaxOutputSize,result,_d,boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,condition,result;return __generator(this,function(_e){switch(_e.label){case 0:_a=node.op;switch(_a){case"NonMaxSuppressionV5":return[3,1];case"NonMaxSuppressionV4":return[3,3];case"NonMaxSuppressionV3":return[3,5];case"NonMaxSuppressionV2":return[3,5];case"Where":return[3,7];case"ListDiff":return[3,9]}return[3,10];case 1:_b=nmsParams(node,tensorMap,context),boxes=_b.boxes,scores=_b.scores,maxOutputSize=_b.maxOutputSize,iouThreshold=_b.iouThreshold,scoreThreshold=_b.scoreThreshold,softNmsSigma=_b.softNmsSigma;return[4,image.nonMaxSuppressionWithScoreAsync(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,softNmsSigma)];case 2:result=_e.sent();return[2,[result.selectedIndices,result.selectedScores]];case 3:_c=nmsParams(node,tensorMap,context),boxes=_c.boxes,scores=_c.scores,maxOutputSize=_c.maxOutputSize,iouThreshold=_c.iouThreshold,scoreThreshold=_c.scoreThreshold;padToMaxOutputSize=getParamValue("padToMaxOutputSize",node,tensorMap,context);return[4,image.nonMaxSuppressionPaddedAsync(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,padToMaxOutputSize)];case 4:result=_e.sent();return[2,[result.selectedIndices,result.validOutputs]];case 5:_d=nmsParams(node,tensorMap,context),boxes=_d.boxes,scores=_d.scores,maxOutputSize=_d.maxOutputSize,iouThreshold=_d.iouThreshold,scoreThreshold=_d.scoreThreshold;return[4,image.nonMaxSuppressionAsync(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold)];case 6:return[2,[_e.sent()]];case 7:condition=cast(getParamValue("condition",node,tensorMap,context),"bool");return[4,whereAsync(condition)];case 8:result=[_e.sent()];condition.dispose();return[2,result];case 9:{return[2,setdiff1dAsync(getParamValue("x",node,tensorMap,context),getParamValue("y",node,tensorMap,context))]}case 10:throw TypeError("Node type "+node.op+" is not implemented")}})})};var executeOp$d=function(node,tensorMap,context){switch(node.op){case"TopKV2":{var x=getParamValue("x",node,tensorMap,context);var k=getParamValue("k",node,tensorMap,context);var sorted=getParamValue("sorted",node,tensorMap,context);var result=topk(x,k,sorted);return[result.values,result.indices]}case"Unique":{var x=getParamValue("x",node,tensorMap,context);var result=unique(x);return[result.values,result.indices]}case"UniqueV2":{var x=getParamValue("x",node,tensorMap,context);var axis=getParamValue("axis",node,tensorMap,context);var result=unique(x,axis);return[result.values,result.indices]}default:throw TypeError("Node type "+node.op+" is not implemented")}};var executeOp$c=function(node,tensorMap,context){switch(node.op){case"Const":{return tensorMap[node.name]}case"PlaceholderWithDefault":var def=getParamValue("default",node,tensorMap,context);return[getTensor(node.name,tensorMap,context)||def];case"Placeholder":return[getTensor(node.name,tensorMap,context)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{var data_1=getParamValue("x",node,tensorMap,context);return[cloneTensor(data_1)]}case"IdentityN":return getParamValue("x",node,tensorMap,context).map(function(t){return cloneTensor(t)});case"Snapshot":var snapshot=getParamValue("x",node,tensorMap,context);return[cloneTensor(snapshot)];case"Shape":return[tensor1d(getParamValue("x",node,tensorMap,context).shape,"int32")];case"ShapeN":return getParamValue("x",node,tensorMap,context).map(function(t){return tensor1d(t.shape)});case"Size":return[scalar(getParamValue("x",node,tensorMap,context).size,"int32")];case"Rank":return[scalar(getParamValue("x",node,tensorMap,context).rank,"int32")];case"NoOp":return[scalar(1)];case"Print":var input=getParamValue("x",node,tensorMap,context);var data=getParamValue("data",node,tensorMap,context);var message=getParamValue("message",node,tensorMap,context);var summarize=getParamValue("summarize",node,tensorMap,context);console.warn("The graph has a tf.print() operation,"+"usually used for debugging, which slows down performance.");console.log(message);for(var i=0;i<data.length;i++){console.log(Array.prototype.slice.call(data[i].dataSync()).slice(0,summarize))}return[input];default:throw TypeError("Node type "+node.op+" is not implemented")}};var HashTable=function(){function HashTable(keyDType,valueDType){this.keyDType=keyDType;this.valueDType=valueDType;this.handle=tfc.scalar(0);this.tensorMap=new Map;tfc.keep(this.handle)}Object.defineProperty(HashTable.prototype,"id",{get:function(){return this.handle.id},enumerable:true,configurable:true});HashTable.prototype.clearAndClose=function(){this.tensorMap.forEach(function(value){return value.dispose()});this.tensorMap.clear();this.handle.dispose()};HashTable.prototype.size=function(){return this.tensorMap.size};HashTable.prototype.tensorSize=function(){return scalar(this.size(),"int32")};HashTable.prototype.import=function(keys,values){return __awaiter(this,void 0,void 0,function(){var $keys;var _this=this;return __generator(this,function(_a){switch(_a.label){case 0:this.checkKeyAndValueTensor(keys,values);return[4,keys.data()];case 1:$keys=_a.sent();this.tensorMap.forEach(function(value){return value.dispose()});this.tensorMap.clear();return[2,tfc.tidy(function(){var $values=tfc.unstack(values);var keysLength=$keys.length;var valuesLength=$values.length;tfc.util.assert(keysLength===valuesLength,function(){return"The number of elements doesn't match, keys has "+(keysLength+" elements, the values has "+valuesLength+" ")+"elements."});for(var i=0;i<keysLength;i++){var key=$keys[i];var value=$values[i];tfc.keep(value);_this.tensorMap.set(key,value)}return _this.handle})]}})})};HashTable.prototype.find=function(keys,defaultValue){return __awaiter(this,void 0,void 0,function(){var $keys;var _this=this;return __generator(this,function(_a){switch(_a.label){case 0:this.checkKeyAndValueTensor(keys,defaultValue);return[4,keys.data()];case 1:$keys=_a.sent();return[2,tfc.tidy(function(){var result=[];for(var i=0;i<$keys.length;i++){var key=$keys[i];var value=_this.findWithDefault(key,defaultValue);result.push(value)}return tfc.stack(result)})]}})})};HashTable.prototype.findWithDefault=function(key,defaultValue){var result=this.tensorMap.get(key);return result!=null?result:defaultValue};HashTable.prototype.checkKeyAndValueTensor=function(key,value){if(key.dtype!==this.keyDType){throw new Error("Expect key dtype "+this.keyDType+", but got "+(""+key.dtype))}if(value.dtype!==this.valueDType){throw new Error("Expect value dtype "+this.valueDType+", but got "+(""+value.dtype))}};return HashTable}();var _this=undefined;var executeOp$b=function(node,tensorMap,context,resourceManager){return __awaiter(_this,void 0,void 0,function(){var _a,keyDType,valueDType,hashTable,handle,keys,values,hashTable,handle,keys,defaultValue,hashTable,handle,hashTable;return __generator(this,function(_b){switch(_b.label){case 0:_a=node.op;switch(_a){case"HashTable":return[3,1];case"HashTableV2":return[3,1];case"LookupTableImport":return[3,2];case"LookupTableImportV2":return[3,2];case"LookupTableFind":return[3,4];case"LookupTableFindV2":return[3,4];case"LookupTableSize":return[3,6];case"LookupTableSizeV2":return[3,6]}return[3,7];case 1:{keyDType=getParamValue("keyDType",node,tensorMap,context);valueDType=getParamValue("valueDType",node,tensorMap,context);hashTable=new HashTable(keyDType,valueDType);resourceManager.addHashTable(node.name,hashTable);return[2,[hashTable.handle]]}case 2:handle=getParamValue("tableHandle",node,tensorMap,context,resourceManager);keys=getParamValue("keys",node,tensorMap,context);values=getParamValue("values",node,tensorMap,context);hashTable=resourceManager.getHashTableById(handle.id);return[4,hashTable.import(keys,values)];case 3:return[2,[_b.sent()]];case 4:handle=getParamValue("tableHandle",node,tensorMap,context,resourceManager);keys=getParamValue("keys",node,tensorMap,context);defaultValue=getParamValue("defaultValue",node,tensorMap,context);hashTable=resourceManager.getHashTableById(handle.id);return[4,hashTable.find(keys,defaultValue)];case 5:return[2,[_b.sent()]];case 6:{handle=getParamValue("tableHandle",node,tensorMap,context,resourceManager);hashTable=resourceManager.getHashTableById(handle.id);return[2,[hashTable.tensorSize()]]}case 7:throw TypeError("Node type "+node.op+" is not implemented")}})})};var executeOp$a=function(node,tensorMap,context){switch(node.op){case"ResizeBilinear":{var images=getParamValue("images",node,tensorMap,context);var size=getParamValue("size",node,tensorMap,context);var alignCorners=getParamValue("alignCorners",node,tensorMap,context);var halfPixelCenters=getParamValue("halfPixelCenters",node,tensorMap,context);return[image.resizeBilinear(images,[size[0],size[1]],alignCorners,halfPixelCenters)]}case"ResizeNearestNeighbor":{var images=getParamValue("images",node,tensorMap,context);var size=getParamValue("size",node,tensorMap,context);var alignCorners=getParamValue("alignCorners",node,tensorMap,context);var halfPixelCenters=getParamValue("halfPixelCenters",node,tensorMap,context);return[image.resizeNearestNeighbor(images,[size[0],size[1]],alignCorners,halfPixelCenters)]}case"CropAndResize":{var image$1=getParamValue("image",node,tensorMap,context);var boxes=getParamValue("boxes",node,tensorMap,context);var boxInd=getParamValue("boxInd",node,tensorMap,context);var cropSize=getParamValue("cropSize",node,tensorMap,context);var method=getParamValue("method",node,tensorMap,context);var extrapolationValue=getParamValue("extrapolationValue",node,tensorMap,context);return[image.cropAndResize(image$1,boxes,boxInd,cropSize,method,extrapolationValue)]}default:throw TypeError("Node type "+node.op+" is not implemented")}};var executeOp$9=function(node,tensorMap,context){switch(node.op){case"Equal":{return[equal(getParamValue("a",node,tensorMap,context),getParamValue("b",node,tensorMap,context))]}case"NotEqual":{return[notEqual(getParamValue("a",node,tensorMap,context),getParamValue("b",node,tensorMap,context))]}case"Greater":{return[greater(getParamValue("a",node,tensorMap,context),getParamValue("b",node,tensorMap,context))]}case"GreaterEqual":{return[greaterEqual(getParamValue("a",node,tensorMap,context),getParamValue("b",node,tensorMap,context))]}case"Less":{return[less(getParamValue("a",node,tensorMap,context),getParamValue("b",node,tensorMap,context))]}case"LessEqual":{return[lessEqual(getParamValue("a",node,tensorMap,context),getParamValue("b",node,tensorMap,context))]}case"LogicalAnd":{return[logicalAnd(getParamValue("a",node,tensorMap,context),getParamValue("b",node,tensorMap,context))]}case"LogicalNot":{return[logicalNot(getParamValue("a",node,tensorMap,context))]}case"LogicalOr":{return[logicalOr(getParamValue("a",node,tensorMap,context),getParamValue("b",node,tensorMap,context))]}case"Select":case"SelectV2":{return[where(getParamValue("condition",node,tensorMap,context),getParamValue("a",node,tensorMap,context),getParamValue("b",node,tensorMap,context))]}default:throw TypeError("Node type "+node.op+" is not implemented")}};var executeOp$8=function(node,tensorMap,context){switch(node.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[matMul$1(getParamValue("a",node,tensorMap,context),getParamValue("b",node,tensorMap,context),getParamValue("transposeA",node,tensorMap,context),getParamValue("transposeB",node,tensorMap,context))];case"Einsum":return[einsum.apply(tfOps,__spread([getParamValue("equation",node,tensorMap,context)],getParamValue("tensors",node,tensorMap,context)))];case"Transpose":return[transpose(getParamValue("x",node,tensorMap,context),getParamValue("perm",node,tensorMap,context))];case"_FusedMatMul":var _a=__read(getParamValue("fusedOps",node,tensorMap,context),2),extraOp=_a[0],activationFunc=_a[1];var isBiasAdd=extraOp==="biasadd";var isPrelu=activationFunc==="prelu";var numArgs=getParamValue("numArgs",node,tensorMap,context);var leakyreluAlpha=getParamValue("leakyreluAlpha",node,tensorMap,context);if(isBiasAdd){if(isPrelu&&numArgs!==2){throw new Error("Fused MatMul with BiasAdd and Prelu must have two "+"extra arguments: bias and alpha.")}if(!isPrelu&&numArgs!==1){throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias.")}}var _b=__read(getParamValue("args",node,tensorMap,context),2),biasArg=_b[0],preluArg=_b[1];return[matMul({a:getParamValue("a",node,tensorMap,context),b:getParamValue("b",node,tensorMap,context),transposeA:getParamValue("transposeA",node,tensorMap,context),transposeB:getParamValue("transposeB",node,tensorMap,context),bias:biasArg,activation:activationFunc,preluActivationWeights:preluArg,leakyreluAlpha:leakyreluAlpha})];default:throw TypeError("Node type "+node.op+" is not implemented")}};var executeOp$7=function(node,tensorMap,context){switch(node.op){case"FusedBatchNorm":case"FusedBatchNormV2":{return[batchNorm(getParamValue("x",node,tensorMap,context),getParamValue("mean",node,tensorMap,context),getParamValue("variance",node,tensorMap,context),getParamValue("offset",node,tensorMap,context),getParamValue("scale",node,tensorMap,context),getParamValue("epsilon",node,tensorMap,context))]}case"FusedBatchNormV3":{return[batchNorm(getParamValue("x",node,tensorMap,context),getParamValue("mean",node,tensorMap,context),getParamValue("variance",node,tensorMap,context),getParamValue("offset",node,tensorMap,context),getParamValue("scale",node,tensorMap,context),getParamValue("epsilon",node,tensorMap,context))]}case"LRN":{return[localResponseNormalization(getParamValue("x",node,tensorMap,context),getParamValue("radius",node,tensorMap,context),getParamValue("bias",node,tensorMap,context),getParamValue("alpha",node,tensorMap,context),getParamValue("beta",node,tensorMap,context))]}case"Softmax":{return[softmax(getParamValue("x",node,tensorMap,context))]}case"LogSoftmax":{return[logSoftmax(getParamValue("x",node,tensorMap,context))]}case"SparseToDense":{return[sparseToDense(getParamValue("sparseIndices",node,tensorMap,context),getParamValue("outputShape",node,tensorMap,context),getParamValue("sparseValues",node,tensorMap,context),getParamValue("defaultValue",node,tensorMap,context))]}default:throw TypeError("Node type "+node.op+" is not implemented")}};var executeOp$6=function(node,tensorMap,context){switch(node.op){case"Max":{var axis=getParamValue("axis",node,tensorMap,context);var keepDims=getParamValue("keepDims",node,tensorMap,context);return[max(getParamValue("x",node,tensorMap,context),axis,keepDims)]}case"Mean":{var axis=getParamValue("axis",node,tensorMap,context);var keepDims=getParamValue("keepDims",node,tensorMap,context);return[mean(getParamValue("x",node,tensorMap,context),axis,keepDims)]}case"Min":{var axis=getParamValue("axis",node,tensorMap,context);var keepDims=getParamValue("keepDims",node,tensorMap,context);return[min(getParamValue("x",node,tensorMap,context),axis,keepDims)]}case"Sum":{var axis=getParamValue("axis",node,tensorMap,context);var keepDims=getParamValue("keepDims",node,tensorMap,context);return[sum(getParamValue("x",node,tensorMap,context),axis,keepDims)]}case"All":{var axis=getParamValue("axis",node,tensorMap,context);var keepDims=getParamValue("keepDims",node,tensorMap,context);return[all(getParamValue("x",node,tensorMap,context),axis,keepDims)]}case"Any":{var axis=getParamValue("axis",node,tensorMap,context);var keepDims=getParamValue("keepDims",node,tensorMap,context);return[any(getParamValue("x",node,tensorMap,context),axis,keepDims)]}case"ArgMax":{var axis=getParamValue("axis",node,tensorMap,context);return[argMax(getParamValue("x",node,tensorMap,context),axis)]}case"ArgMin":{var axis=getParamValue("axis",node,tensorMap,context);return[argMin(getParamValue("x",node,tensorMap,context),axis)]}case"Prod":{var axis=getParamValue("axis",node,tensorMap,context);var keepDims=getParamValue("keepDims",node,tensorMap,context);return[prod(getParamValue("x",node,tensorMap,context),axis,keepDims)]}case"Cumsum":{var axis=getParamValue("axis",node,tensorMap,context);var exclusive=getParamValue("exclusive",node,tensorMap,context);var reverse=getParamValue("reverse",node,tensorMap,context);return[cumsum(getParamValue("x",node,tensorMap,context),axis,exclusive,reverse)]}case"Bincount":var x=getParamValue("x",node,tensorMap,context);var weights=getParamValue("weights",node,tensorMap,context);var size=getParamValue("size",node,tensorMap,context);return[bincount(x,weights,size)];case"DenseBincount":{var x_1=getParamValue("x",node,tensorMap,context);var weights_1=getParamValue("weights",node,tensorMap,context);var size_1=getParamValue("size",node,tensorMap,context);var binaryOutput=getParamValue("binaryOutput",node,tensorMap,context);return[denseBincount(x_1,weights_1,size_1,binaryOutput)]}default:throw TypeError("Node type "+node.op+" is not implemented")}};var executeOp$5=function(node,tensorMap,context){switch(node.op){case"ConcatV2":case"Concat":{var n=getParamValue("n",node,tensorMap,context);var axis=getParamValue("axis",node,tensorMap,context);var inputs=getParamValue("tensors",node,tensorMap,context);inputs=inputs.slice(0,n);return[concat(inputs,axis)]}case"Gather":{var input=getParamValue("x",node,tensorMap,context);var indices=getParamValue("indices",node,tensorMap,context);return[gather(input,cast(indices,"int32"),0)]}case"GatherV2":{var axis=getParamValue("axis",node,tensorMap,context);var batchDims=getParamValue("batchDims",node,tensorMap,context);var input=getParamValue("x",node,tensorMap,context);var indices=getParamValue("indices",node,tensorMap,context);return[gather(input,cast(indices,"int32"),axis,batchDims)]}case"Reverse":{var dims=getParamValue("dims",node,tensorMap,context);var axis=[];for(var i=0;i<dims.length;i++){if(dims[i]){axis.push(i)}}var input=getParamValue("x",node,tensorMap,context);return[reverse(input,axis)]}case"ReverseV2":{var axis=getParamValue("axis",node,tensorMap,context);var input=getParamValue("x",node,tensorMap,context);return[reverse(input,axis)]}case"Slice":{var begin=getParamValue("begin",node,tensorMap,context);var size=getParamValue("size",node,tensorMap,context);return[slice(getParamValue("x",node,tensorMap,context),begin,size)]}case"StridedSlice":{var begin=getParamValue("begin",node,tensorMap,context);var end=getParamValue("end",node,tensorMap,context);var strides=getParamValue("strides",node,tensorMap,context);var beginMask=getParamValue("beginMask",node,tensorMap,context);var endMask=getParamValue("endMask",node,tensorMap,context);var ellipsisMask=getParamValue("ellipsisMask",node,tensorMap,context);var newAxisMask=getParamValue("newAxisMask",node,tensorMap,context);var shrinkAxisMask=getParamValue("shrinkAxisMask",node,tensorMap,context);var tensor=getParamValue("x",node,tensorMap,context);return[stridedSlice(tensor,begin,end,strides,beginMask,endMask,ellipsisMask,newAxisMask,shrinkAxisMask)]}case"Pack":{return tfc.tidy(function(){var axis=getParamValue("axis",node,tensorMap,context);var tensors=getParamValue("tensors",node,tensorMap,context);var shape=tensors[0].shape;var squeezedShape=squeeze(tensors[0]).shape;var mapped=tensors.map(function(tensor){var sameShape=tfc.util.arraysEqual(tensor.shape,shape);if(!sameShape&&!tfc.util.arraysEqual(squeeze(tensor).shape,squeezedShape)){throw new Error("the input tensors shape does not match")}return sameShape?tensor:reshape(tensor,shape)});return[stack(mapped,axis)]})}case"Unpack":{var axis=getParamValue("axis",node,tensorMap,context);var tensor=getParamValue("tensor",node,tensorMap,context);return unstack(tensor,axis)}case"Tile":{var reps=getParamValue("reps",node,tensorMap,context);return[tile(getParamValue("x",node,tensorMap,context),reps)]}case"Split":case"SplitV":{var axis=getParamValue("axis",node,tensorMap,context);var numOrSizeSplits=getParamValue("numOrSizeSplits",node,tensorMap,context);var tensor=getParamValue("x",node,tensorMap,context);return split$1(tensor,numOrSizeSplits,axis)}case"ScatterNd":{var indices=getParamValue("indices",node,tensorMap,context);var values=getParamValue("values",node,tensorMap,context);var shape=getParamValue("shape",node,tensorMap,context);return[scatterND(indices,values,shape)]}case"GatherNd":{var x=getParamValue("x",node,tensorMap,context);var indices=getParamValue("indices",node,tensorMap,context);return[gatherND(x,indices)]}case"SparseToDense":{var indices=getParamValue("sparseIndices",node,tensorMap,context);var shape=getParamValue("outputShape",node,tensorMap,context);var sparseValues=getParamValue("sparseValues",node,tensorMap,context);var defaultValue=getParamValue("defaultValue",node,tensorMap,context);return[sparseToDense(indices,sparseValues,shape,sparseValues.dtype===defaultValue.dtype?defaultValue:cast(defaultValue,sparseValues.dtype))]}default:throw TypeError("Node type "+node.op+" is not implemented")}};var executeOp$4=function(node,tensorMap,context){switch(node.op){case"SparseFillEmptyRows":{var _a=sparse.sparseFillEmptyRows(getParamValue("indices",node,tensorMap,context),getParamValue("values",node,tensorMap,context),getParamValue("denseShape",node,tensorMap,context),getParamValue("defaultValue",node,tensorMap,context)),outputIndices=_a.outputIndices,outputValues=_a.outputValues,emptyRowIndicator=_a.emptyRowIndicator,reverseIndexMap=_a.reverseIndexMap;return[outputIndices,outputValues,emptyRowIndicator,reverseIndexMap]}case"SparseReshape":{var _b=sparse.sparseReshape(getParamValue("inputIndices",node,tensorMap,context),getParamValue("inputShape",node,tensorMap,context),getParamValue("newShape",node,tensorMap,context)),outputIndices=_b.outputIndices,outputShape=_b.outputShape;return[outputIndices,outputShape]}case"SparseSegmentMean":{var outputData=sparse.sparseSegmentMean(getParamValue("data",node,tensorMap,context),getParamValue("indices",node,tensorMap,context),getParamValue("segmentIds",node,tensorMap,context));return[outputData]}case"SparseSegmentSum":{var outputData=sparse.sparseSegmentSum(getParamValue("data",node,tensorMap,context),getParamValue("indices",node,tensorMap,context),getParamValue("segmentIds",node,tensorMap,context));return[outputData]}default:throw TypeError("Node type "+node.op+" is not implemented")}};var executeOp$3=function(node,tensorMap,context){switch(node.op){case"FFT":{return[fft(getParamValue("x",node,tensorMap,context))]}case"IFFT":{return[ifft(getParamValue("x",node,tensorMap,context))]}case"RFFT":{return[rfft(getParamValue("x",node,tensorMap,context))]}case"IRFFT":{return[irfft(getParamValue("x",node,tensorMap,context))]}default:throw TypeError("Node type "+node.op+" is not implemented")}};var executeOp$2=function(node,tensorMap,context){switch(node.op){case"StringNGrams":{var _a=string.stringNGrams(getParamValue("data",node,tensorMap,context),getParamValue("dataSplits",node,tensorMap,context),getParamValue("separator",node,tensorMap,context),getParamValue("nGramWidths",node,tensorMap,context),getParamValue("leftPad",node,tensorMap,context),getParamValue("rightPad",node,tensorMap,context),getParamValue("padWidth",node,tensorMap,context),getParamValue("preserveShortSequences",node,tensorMap,context)),nGrams=_a.nGrams,nGramsSplits=_a.nGramsSplits;return[nGrams,nGramsSplits]}case"StringSplit":{var _b=string.stringSplit(getParamValue("input",node,tensorMap,context),getParamValue("delimiter",node,tensorMap,context),getParamValue("skipEmpty",node,tensorMap,context)),indices=_b.indices,values=_b.values,shape=_b.shape;return[indices,values,shape]}case"StringToHashBucketFast":{var output=string.stringToHashBucketFast(getParamValue("input",node,tensorMap,context),getParamValue("numBuckets",node,tensorMap,context));return[output]}default:throw TypeError("Node type "+node.op+" is not implemented")}};var executeOp$1=function(node,tensorMap,context){switch(node.op){case"Cast":{return[cast(getParamValue("x",node,tensorMap,context),getParamValue("dtype",node,tensorMap,context))]}case"ExpandDims":{var axis=getParamValue("axis",node,tensorMap,context);return[expandDims(getParamValue("x",node,tensorMap,context),axis)]}case"Squeeze":{var axis=getParamValue("axis",node,tensorMap,context);return[squeeze(getParamValue("x",node,tensorMap,context),axis)]}case"Reshape":{return[reshape(getParamValue("x",node,tensorMap,context),getParamValue("shape",node,tensorMap,context))]}case"MirrorPad":{return[mirrorPad(getParamValue("x",node,tensorMap,context),getParamValue("padding",node,tensorMap,context),getParamValue("mode",node,tensorMap,context))]}case"PadV2":case"Pad":{return[pad(getParamValue("x",node,tensorMap,context),getParamValue("padding",node,tensorMap,context),getParamValue("constantValue",node,tensorMap,context))]}case"SpaceToBatchND":{var blockShape=getParamValue("blockShape",node,tensorMap,context);var paddings=getParamValue("paddings",node,tensorMap,context);return[spaceToBatchND(getParamValue("x",node,tensorMap,context),blockShape,paddings)]}case"BatchToSpaceND":{var blockShape=getParamValue("blockShape",node,tensorMap,context);var crops=getParamValue("crops",node,tensorMap,context);return[batchToSpaceND(getParamValue("x",node,tensorMap,context),blockShape,crops)]}case"DepthToSpace":{var blockSize=getParamValue("blockSize",node,tensorMap,context);var dataFormat=getParamValue("dataFormat",node,tensorMap,context).toUpperCase();return[depthToSpace(getParamValue("x",node,tensorMap,context),blockSize,dataFormat)]}case"BroadcastTo":{return[broadcastTo(getParamValue("x",node,tensorMap,context),getParamValue("shape",node,tensorMap,context))]}case"BroadcastArgs":{return[broadcastArgs(getParamValue("s0",node,tensorMap,context),getParamValue("s1",node,tensorMap,context))]}default:throw TypeError("Node type "+node.op+" is not implemented")}};function executeOp(node,tensorMap,context,resourceManager){var value=function(node,tensorMap,context){switch(node.category){case"arithmetic":return tfc__namespace.tidy(function(){return executeOp$j(node,tensorMap,context)});case"basic_math":return tfc__namespace.tidy(function(){return executeOp$i(node,tensorMap,context)});case"control":return executeOp$h(node,tensorMap,context);case"convolution":return tfc__namespace.tidy(function(){return executeOp$g(node,tensorMap,context)});case"creation":return tfc__namespace.tidy(function(){return executeOp$f(node,tensorMap,context)});case"dynamic":return executeOp$e(node,tensorMap,context);case"evaluation":return tfc__namespace.tidy(function(){return executeOp$d(node,tensorMap,context)});case"image":return tfc__namespace.tidy(function(){return executeOp$a(node,tensorMap,context)});case"graph":return tfc__namespace.tidy(function(){return executeOp$c(node,tensorMap,context)});case"logical":return tfc__namespace.tidy(function(){return executeOp$9(node,tensorMap,context)});case"matrices":return tfc__namespace.tidy(function(){return executeOp$8(node,tensorMap,context)});case"normalization":return tfc__namespace.tidy(function(){return executeOp$7(node,tensorMap,context)});case"reduction":return tfc__namespace.tidy(function(){return executeOp$6(node,tensorMap,context)});case"slice_join":return tfc__namespace.tidy(function(){return executeOp$5(node,tensorMap,context)});case"sparse":return tfc__namespace.tidy(function(){return executeOp$4(node,tensorMap,context)});case"spectral":return tfc__namespace.tidy(function(){return executeOp$3(node,tensorMap,context)});case"string":return tfc__namespace.tidy(function(){return executeOp$2(node,tensorMap,context)});case"transformation":return tfc__namespace.tidy(function(){return executeOp$1(node,tensorMap,context)});case"hash_table":return executeOp$b(node,tensorMap,context,resourceManager);case"custom":var opMapper=getRegisteredOp(node.op);if(opMapper&&opMapper.customExecutor){return opMapper.customExecutor(new NodeValueImpl(node,tensorMap,context))}else{throw TypeError("Custom op "+node.op+" is not registered.")}default:throw TypeError("Unknown op '"+node.op+"'. File an issue at "+"https://github.com/tensorflow/tfjs/issues so we can add it"+", or register a custom execution with tf.registerOp()")}}(node,tensorMap,context);if(tfc__namespace.util.isPromise(value)){return value.then(function(data){return[].concat(data)})}return[].concat(value)}var ExecutionContext=function(){function ExecutionContext(weightMap,tensorArrayMap,tensorListMap,functionMap){if(weightMap===void 0){weightMap={}}if(tensorArrayMap===void 0){tensorArrayMap={}}if(tensorListMap===void 0){tensorListMap={}}if(functionMap===void 0){functionMap={}}this.weightMap=weightMap;this.tensorArrayMap=tensorArrayMap;this.tensorListMap=tensorListMap;this.functionMap=functionMap;this.rootContext={id:0,frameName:"",iterationId:0};this.contexts=[this.rootContext];this.lastId=0;this.generateCurrentContextIds()}ExecutionContext.prototype.newFrame=function(id,frameName){return{id:id,frameName:frameName,iterationId:0}};Object.defineProperty(ExecutionContext.prototype,"currentContext",{get:function(){return this.contexts},set:function(contexts){if(this.contexts!==contexts){this.contexts=contexts;this.generateCurrentContextIds()}},enumerable:true,configurable:true});Object.defineProperty(ExecutionContext.prototype,"currentContextId",{get:function(){return this._currentContextIds[0]},enumerable:true,configurable:true});Object.defineProperty(ExecutionContext.prototype,"currentContextIds",{get:function(){return this._currentContextIds},enumerable:true,configurable:true});ExecutionContext.prototype.generateCurrentContextIds=function(){var names=[];for(var i=0;i<this.contexts.length-1;i++){var contexts=this.contexts.slice(0,this.contexts.length-i);names.push(this.contextIdforContexts(contexts))}names.push("");this._currentContextIds=names};ExecutionContext.prototype.contextIdforContexts=function(contexts){return contexts?contexts.map(function(context){return context.id===0&&context.iterationId===0?"":context.frameName+"-"+context.iterationId}).join("/"):""};ExecutionContext.prototype.enterFrame=function(frameId){if(this.contexts){this.lastId++;this.contexts=this.contexts.slice();this.contexts.push(this.newFrame(this.lastId,frameId));this._currentContextIds.unshift(this.contextIdforContexts(this.contexts))}};ExecutionContext.prototype.exitFrame=function(){if(this.contexts&&this.contexts.length>1){this.contexts=this.contexts.slice();this.contexts.splice(-1);this.currentContextIds.shift()}else{throw new Error("Cannot exit frame, the context is empty")}};ExecutionContext.prototype.nextIteration=function(){if(this.contexts&&this.contexts.length>0){this.contexts=this.contexts.slice();this.lastId++;var context=Object.assign({},this.contexts[this.contexts.length-1]);context.iterationId+=1;context.id=this.lastId;this.contexts.splice(-1,1,context);this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))}else{throw new Error("Cannot increase frame iteration, the context is empty")}};ExecutionContext.prototype.getWeight=function(name){return this.weightMap[name]};ExecutionContext.prototype.addTensorArray=function(tensorArray){this.tensorArrayMap[tensorArray.id]=tensorArray};ExecutionContext.prototype.getTensorArray=function(id){return this.tensorArrayMap[id]};ExecutionContext.prototype.addTensorList=function(tensorList){this.tensorListMap[tensorList.id]=tensorList};ExecutionContext.prototype.getTensorList=function(id){return this.tensorListMap[id]};ExecutionContext.prototype.dispose=function(keepIds){for(var key in this.tensorArrayMap){this.tensorArrayMap[key].clearAndClose(keepIds)}for(var key in this.tensorListMap){this.tensorListMap[key].clearAndClose(keepIds)}};return ExecutionContext}();function getExecutionSubgraph(inputs,outputs,weightMap,initNodes){var usedNodes=new Set;var missingInputs=[];var dynamicNode=null;var syncInputs=null;var seen=new Set;var inputNodeNames=Object.keys(inputs).map(function(name){return parseNodeName(name)[0]});var initNodeNames=[];if(initNodes!=null){initNodeNames=initNodes.map(function(node){return parseNodeName(node.name)[0]})}var frontier=__spread(outputs);while(frontier.length>0){var node=frontier.pop();if(isControlFlow(node)||isDynamicShape(node)||isHashTable(node)){if(dynamicNode==null){dynamicNode=node;syncInputs=dynamicNode.children.map(function(child){return child.name}).filter(function(name){return usedNodes.has(name)})}}usedNodes.add(node.name);if(weightMap[node.name]!=null){continue}if(inputNodeNames.indexOf(node.name)!==-1){continue}if(initNodeNames.indexOf(node.name)!==-1){continue}if(node.inputs.length===0){missingInputs.push(node.name);continue}node.inputs.forEach(function(input){if(seen.has(input.name)){return}seen.add(input.name);frontier.push(input)})}return{inputs:inputs,outputs:outputs,usedNodes:usedNodes,missingInputs:missingInputs,dynamicNode:dynamicNode,syncInputs:syncInputs}}function getNodesInTopologicalOrder(graph,weightMap,executionInfo){var usedNodes=executionInfo.usedNodes,inputs=executionInfo.inputs;var frontier=[];var inputNodes=Object.keys(inputs).map(function(name){return parseNodeName(name)[0]}).map(function(name){return graph.nodes[name]});var initNodes=graph.initNodes;inputNodes.forEach(function(input){if(usedNodes.has(input.name)){frontier.push(input)}});graph.weights.forEach(function(weight){if(usedNodes.has(weight.name)){frontier.push(weight)}});if(initNodes!=null){initNodes.forEach(function(node){if(usedNodes.has(node.name)){frontier.push(node)}})}var seen=new Set;var orderedNodes=[];while(frontier.length>0){var node=frontier.pop();seen.add(node.name);if(!weightMap[node.name]){orderedNodes.push(node)}node.children.forEach(function(child){if(!seen.has(child.name)&&usedNodes.has(child.name)&&child.inputs.every(function(input){return seen.has(input.name)})){frontier.push(child)}})}return orderedNodes}var CONTROL_FLOW_OPS=["Switch","Merge","Enter","Exit","NextIteration","StatelessIf","StatelessWhile","if","While"];var DYNAMIC_SHAPE_OPS=["NonMaxSuppressionV2","NonMaxSuppressionV3","NonMaxSuppressionV5","Where"];var HASH_TABLE_OPS=["HashTable","HashTableV2","LookupTableImport","LookupTableImportV2","LookupTableFind","LookupTableFindV2","LookupTableSize","LookupTableSizeV2"];function isControlFlow(node){return CONTROL_FLOW_OPS.indexOf(node.op)>=0}function isDynamicShape(node){return DYNAMIC_SHAPE_OPS.indexOf(node.op)>=0}function isHashTable(node){return HASH_TABLE_OPS.indexOf(node.op)>=0}var GraphExecutor=function(){function GraphExecutor(graph,parent){var _this=this;this.graph=graph;this.parent=parent;this.compiledMap=new Map;this._weightMap={};this.SEPERATOR=",";this._functions={};this._functionExecutorMap={};this._outputs=graph.outputs;this._inputs=graph.inputs;this._initNodes=graph.initNodes;this._signature=graph.signature;this._functions=graph.functions;if(graph.functions!=null){Object.keys(graph.functions).forEach(function(name){_this._functionExecutorMap[name]=new GraphExecutor(graph.functions[name],_this)})}}Object.defineProperty(GraphExecutor.prototype,"weightIds",{get:function(){return this.parent?this.parent.weightIds:this._weightIds},enumerable:true,configurable:true});Object.defineProperty(GraphExecutor.prototype,"functionExecutorMap",{get:function(){return this.parent?this.parent.functionExecutorMap:this._functionExecutorMap},enumerable:true,configurable:true});Object.defineProperty(GraphExecutor.prototype,"weightMap",{get:function(){return this.parent?this.parent.weightMap:this._weightMap},set:function(weightMap){var weightIds=Object.keys(weightMap).map(function(key){return weightMap[key].map(function(tensor){return tensor.id})});this._weightIds=[].concat.apply([],__spread(weightIds));this._weightMap=weightMap},enumerable:true,configurable:true});Object.defineProperty(GraphExecutor.prototype,"resourceManager",{set:function(resourceManager){this._resourceManager=resourceManager},enumerable:true,configurable:true});Object.defineProperty(GraphExecutor.prototype,"inputs",{get:function(){return this._inputs.map(function(node){return{name:node.name,shape:node.attrParams["shape"]?node.attrParams["shape"].value:undefined,dtype:node.attrParams["dtype"]?node.attrParams["dtype"].value:undefined}})},enumerable:true,configurable:true});Object.defineProperty(GraphExecutor.prototype,"outputs",{get:function(){return this._outputs.map(function(node){return{name:node.name,shape:node.attrParams["shape"]?node.attrParams["shape"].value:undefined,dtype:node.attrParams["dtype"]?node.attrParams["dtype"].value:undefined}})},enumerable:true,configurable:true});Object.defineProperty(GraphExecutor.prototype,"inputNodes",{get:function(){return this._inputs.map(function(node){return node.signatureKey||node.name})},enumerable:true,configurable:true});Object.defineProperty(GraphExecutor.prototype,"outputNodes",{get:function(){return this._outputs.map(function(node){var name=node.signatureKey||node.name;return node.defaultOutput?name+":"+node.defaultOutput:name})},enumerable:true,configurable:true});Object.defineProperty(GraphExecutor.prototype,"functions",{get:function(){var _this=this;return Object.keys(this._functions).reduce(function(map,key){map[key]=_this._functions[key].signature;return map},{})},enumerable:true,configurable:true});GraphExecutor.prototype.getCompilationKey=function(inputs,outputs){var sortedInputs=inputs.map(function(node){return node.name}).sort();var sortedOutputs=outputs.map(function(node){return node.name}).sort();return sortedInputs.join(this.SEPERATOR)+"--"+sortedOutputs.join(this.SEPERATOR)};GraphExecutor.prototype.compile=function(inputs,outputs){var executionInfo=getExecutionSubgraph(inputs,outputs,this.weightMap,this._initNodes);var missingInputs=executionInfo.missingInputs,dynamicNode=executionInfo.dynamicNode,syncInputs=executionInfo.syncInputs;if(dynamicNode!=null){throw new Error("This execution contains the node '"+dynamicNode.name+"', which has "+("the dynamic op '"+dynamicNode.op+"'. Please use ")+"model.executeAsync() instead. Alternatively, to avoid the "+("dynamic ops, specify the inputs ["+syncInputs+"]"))}if(missingInputs.length>0){var outNames=outputs.map(function(n){return n.name});var inNames=Object.keys(inputs);throw new Error("Cannot compute the outputs ["+outNames+"] from the provided inputs "+("["+inNames+"]. Missing the following inputs: ["+missingInputs+"]"))}return getNodesInTopologicalOrder(this.graph,this.weightMap,executionInfo)};GraphExecutor.prototype.execute=function(inputs,outputs){var _this=this;inputs=this.mapInputs(inputs);var names=Object.keys(inputs).sort();this.checkInputs(inputs);this.checkInputShapeAndType(inputs);outputs=this.mapOutputs(outputs);this.checkOutputs(outputs);var inputNodes=names.map(function(name){return _this.graph.nodes[parseNodeName(name)[0]]});var outputNodeNames=outputs.map(function(name){return parseNodeName(name)[0]});var outputNodes=outputNodeNames.map(function(name){return _this.graph.nodes[name]});if(outputNodes.length===0){outputNodes=this._outputs}var compilationKey=this.getCompilationKey(inputNodes,outputNodes);var orderedNodes=this.compiledMap.get(compilationKey);if(orderedNodes==null){orderedNodes=this.compile(inputs,outputNodes);this.compiledMap.set(compilationKey,orderedNodes)}var tensorArrayMap={};var tensorListMap={};return tfc.tidy(function(){var context=new ExecutionContext(_this.weightMap,tensorArrayMap,tensorListMap,_this.functionExecutorMap);var tensorsMap=Object.assign({},_this.weightMap);Object.keys(inputs).forEach(function(name){var _a=__read(parseNodeName(name),2),nodeName=_a[0],index=_a[1];var tensors=[];tensors[index]=inputs[name];tensorsMap[nodeName]=tensors});var tensorsToKeep=_this.getFrozenTensorIds(tensorsMap);var intermediateTensorConsumerCount={};for(var i=0;i<orderedNodes.length;i++){var node=orderedNodes[i];if(!tensorsMap[node.name]){var tensors=executeOp(node,tensorsMap,context,_this._resourceManager);if(tfc.util.isPromise(tensors)){throw new Error("The execution of the op '"+node.op+"' returned a promise. "+"Please use model.executeAsync() instead.")}tensorsMap[node.name]=tensors;_this.checkTensorForDisposal(node.name,node,tensorsMap,context,tensorsToKeep,outputNodeNames,intermediateTensorConsumerCount)}}if(_this.parent==null){context.dispose(tensorsToKeep)}return outputs.map(function(name){return getTensor(name,tensorsMap,context)})})};GraphExecutor.prototype.getFrozenTensorIds=function(tensorMap){var ids=[].concat.apply([],Object.keys(tensorMap).map(function(key){return tensorMap[key]}).map(function(tensors){return tensors.map(function(tensor){return tensor.id})}));return new Set(ids)};GraphExecutor.prototype.checkTensorForDisposal=function(nodeName,node,tensorMap,context,tensorsToKeep,outputNames,intermediateTensorConsumerCount){if(node.category==="control"||outputNames.indexOf(nodeName)!==-1){return}tensorMap[nodeName].forEach(function(tensor){if(tensor!=null){intermediateTensorConsumerCount[tensor.id]=(intermediateTensorConsumerCount[tensor.id]||0)+node.children.length}});node.inputs.forEach(function(input){if(input.category!=="control"){var tensors=getTensorsForCurrentContenxt(input.name,tensorMap,context);if(tensors!=null){tensors.forEach(function(tensor){if(tensor&&!tensor.kept&&!tensorsToKeep.has(tensor.id)){var count=intermediateTensorConsumerCount[tensor.id];if(count===1){tensor.dispose();delete intermediateTensorConsumerCount[tensor.id]}else if(count!=null){intermediateTensorConsumerCount[tensor.id]--}}})}}})};GraphExecutor.prototype.executeAsync=function(inputs,outputs){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(_a){return[2,this._executeAsync(inputs,outputs)]})})};GraphExecutor.prototype._executeAsync=function(inputs,outputs,isFunctionExecution,tensorArrayMap,tensorListMap){if(isFunctionExecution===void 0){isFunctionExecution=false}if(tensorArrayMap===void 0){tensorArrayMap={}}if(tensorListMap===void 0){tensorListMap={}}return __awaiter(this,void 0,void 0,function(){var context,tensorMap,results,outputIds,inputIds,keepIds;return __generator(this,function(_a){switch(_a.label){case 0:if(!isFunctionExecution){inputs=this.mapInputs(inputs);this.checkInputs(inputs);this.checkInputShapeAndType(inputs);outputs=this.mapOutputs(outputs);this.checkOutputs(outputs)}context=new ExecutionContext(this.weightMap,tensorArrayMap,tensorListMap,this.functionExecutorMap);return[4,this.executeWithControlFlow(inputs,context,outputs,isFunctionExecution)];case 1:tensorMap=_a.sent();results=outputs.map(function(name){return getTensor(name,tensorMap,context)});outputIds=results.map(function(t){return t.id});inputIds=Object.keys(inputs).map(function(name){return inputs[name].id});keepIds=new Set(__spread(outputIds,inputIds,this.weightIds));Object.keys(tensorMap).forEach(function(key){var tensorArray=tensorMap[key];tensorArray.forEach(function(tensor){if(tensor&&!tensor.kept&&!tensor.isDisposed&&!keepIds.has(tensor.id)){tensor.dispose()}})});if(this.parent==null){context.dispose(keepIds)}return[2,results]}})})};GraphExecutor.prototype.executeFunctionAsync=function(inputs,tensorArrayMap,tensorListMap){return __awaiter(this,void 0,void 0,function(){var mappedInputs;var _this=this;return __generator(this,function(_a){mappedInputs=inputs.reduce(function(map,tensor,index){map[_this.inputs[index].name]=tensor;return map},{});return[2,this._executeAsync(mappedInputs,this.outputNodes,true,tensorArrayMap,tensorListMap)]})})};GraphExecutor.prototype.executeWithControlFlow=function(inputs,context,outputNames,isFunctionExecution){return __awaiter(this,void 0,void 0,function(){var names,inputNodes,outputNodeNames,outputNodes,_a,usedNodes,missingInputs,dynamicNode,syncInputs,stack,tensorsMap,intermediateTensorConsumerCount,tensorsToKeep,added,promises,missingOutputs,alternativeMsg;var _this=this;return __generator(this,function(_b){switch(_b.label){case 0:names=Object.keys(inputs);inputNodes=names.map(function(name){return _this.graph.nodes[parseNodeName(name)[0]]});outputNodeNames=outputNames.map(function(name){return parseNodeName(name)[0]});outputNodes=outputNodeNames.map(function(name){return _this.graph.nodes[name]});if(outputNodes.length===0){outputNodes=this._outputs}_a=getExecutionSubgraph(inputs,outputNodes,this.weightMap,this._initNodes),usedNodes=_a.usedNodes,missingInputs=_a.missingInputs,dynamicNode=_a.dynamicNode,syncInputs=_a.syncInputs;stack=__spread(inputNodes,this.graph.weights,this._initNodes||[]).map(function(node){return{node:node,contexts:context.currentContext}});tensorsMap=Object.assign({},this.weightMap);Object.keys(inputs).forEach(function(name){var _a=__read(parseNodeName(name),2),nodeName=_a[0],index=_a[1];var tensors=[];tensors[index]=inputs[name];tensorsMap[nodeName]=tensors});intermediateTensorConsumerCount={};tensorsToKeep=this.getFrozenTensorIds(tensorsMap);added={};_b.label=1;case 1:if(!(stack.length>0))return[3,3];promises=this.processStack(inputNodes,stack,context,tensorsMap,added,tensorsToKeep,outputNodeNames,intermediateTensorConsumerCount,usedNodes);return[4,Promise.all(promises)];case 2:_b.sent();return[3,1];case 3:if(dynamicNode==null&&!isFunctionExecution){console.warn("This model execution did not contain any nodes with control flow "+"or dynamic output shapes. You can use model.execute() instead.")}missingOutputs=outputNodes.filter(function(node){return!isControlFlow(node)&&!getTensor(node.name,tensorsMap,context)}).map(function(node){return node.name});if(missingOutputs.length>0){alternativeMsg="";if(dynamicNode!=null){alternativeMsg="Alternatively, to avoid the dynamic ops, use model.execute() "+("and specify the inputs ["+syncInputs+"]")}throw new Error("Cannot compute the outputs ["+missingOutputs+"] from the provided "+("inputs ["+names+"]. Consider providing the following inputs: ")+("["+missingInputs+"]. "+alternativeMsg))}return[2,tensorsMap]}})})};GraphExecutor.prototype.processStack=function(inputNodes,stack,context,tensorMap,added,tensorsToKeep,outputNames,intermediateTensorConsumerCount,usedNodes){var _this=this;var promises=[];var _loop_1=function(){var _a,_b;var item=stack.pop();context.currentContext=item.contexts;var nodeName="";if(item.node.op==="Enter"&&getParamValue("isConstant",item.node,tensorMap,context)){_a=__read(getNodeNameAndIndex(item.node.name,context),1),nodeName=_a[0]}if(tensorMap[item.node.name]==null){var tensors=executeOp(item.node,tensorMap,context,this_1._resourceManager);if(!nodeName){_b=__read(getNodeNameAndIndex(item.node.name,context),1),nodeName=_b[0]}var currentContext_1=context.currentContext;if(tfc.util.isPromise(tensors)){promises.push(tensors.then(function(t){tensorMap[nodeName]=t;context.currentContext=currentContext_1;_this.checkTensorForDisposal(nodeName,item.node,tensorMap,context,tensorsToKeep,outputNames,intermediateTensorConsumerCount);_this.processChildNodes(item.node,stack,context,tensorMap,added,usedNodes);return t}))}else{tensorMap[nodeName]=tensors;this_1.checkTensorForDisposal(nodeName,item.node,tensorMap,context,tensorsToKeep,outputNames,intermediateTensorConsumerCount);this_1.processChildNodes(item.node,stack,context,tensorMap,added,usedNodes)}}else{this_1.processChildNodes(item.node,stack,context,tensorMap,added,usedNodes)}};var this_1=this;while(stack.length>0){_loop_1()}return promises};GraphExecutor.prototype.processChildNodes=function(node,stack,context,tensorMap,added,usedNodes){node.children.forEach(function(childNode){var _a=__read(getNodeNameAndIndex(childNode.name,context),1),nodeName=_a[0];if(added[nodeName]||!usedNodes.has(childNode.name)){return}if(childNode.op==="Merge"){if(childNode.inputNames.some(function(name){return!!getTensor(name,tensorMap,context)})){added[nodeName]=true;stack.push({contexts:context.currentContext,node:childNode})}}else if(childNode.inputNames.every(function(name){return!!getTensor(name,tensorMap,context)})){added[nodeName]=true;stack.push({contexts:context.currentContext,node:childNode})}})};GraphExecutor.prototype.dispose=function(){var _this=this;Object.keys(this.weightMap).forEach(function(key){return _this.weightMap[key].forEach(function(tensor){return tensor.dispose()})})};GraphExecutor.prototype.checkInputShapeAndType=function(inputs){var _this=this;Object.keys(inputs).forEach(function(name){var input=inputs[name];var _a=__read(parseNodeName(name),1),nodeName=_a[0];var node=_this.graph.nodes[nodeName];if(node.attrParams["shape"]&&node.attrParams["shape"].value){var shape_1=node.attrParams["shape"].value;var match=shape_1.length===input.shape.length&&input.shape.every(function(dim,index){return shape_1[index]===-1||shape_1[index]===dim});tfc.util.assert(match,function(){return"The shape of dict['"+node.name+"'] provided in "+("model.execute(dict) must be ["+shape_1+"], but was ")+("["+input.shape+"]")})}if(node.attrParams["dtype"]&&node.attrParams["dtype"].value){tfc.util.assert(input.dtype===node.attrParams["dtype"].value,function(){return"The dtype of dict['"+node.name+"'] provided in "+"model.execute(dict) must be "+(node.attrParams["dtype"].value+", but was "+input.dtype)})}})};GraphExecutor.prototype.mapInputs=function(inputs){var result={};for(var inputName in inputs){if(this._signature!=null&&this._signature.inputs!=null&&this._signature.inputs[inputName]!=null){var tensor=this._signature.inputs[inputName];result[tensor.name]=inputs[inputName]}else{result[inputName]=inputs[inputName]}}return result};GraphExecutor.prototype.checkInputs=function(inputs){var _this=this;var notInGraph=Object.keys(inputs).filter(function(name){var _a=__read(parseNodeName(name),1),nodeName=_a[0];return _this.graph.nodes[nodeName]==null});if(notInGraph.length>0){throw new Error("The dict provided in model.execute(dict) has "+("keys: ["+notInGraph+"] that are not part of graph"))}};GraphExecutor.prototype.mapOutputs=function(outputs){var _this=this;return outputs.map(function(name){if(_this._signature!=null&&_this._signature.outputs!=null&&_this._signature.outputs[name]!=null){var tensor=_this._signature.outputs[name];return tensor.name}return name},{})};GraphExecutor.prototype.checkOutputs=function(outputs){var _this=this;outputs.forEach(function(name){var _a=__read(parseNodeName(name),1),normalizedName=_a[0];if(!_this.graph.nodes[normalizedName]){throw new Error("The output '"+name+"' is not found in the graph")}})};return GraphExecutor}();var ResourceManager=function(){function ResourceManager(hashTableNameToHandle,hashTableMap){if(hashTableNameToHandle===void 0){hashTableNameToHandle={}}if(hashTableMap===void 0){hashTableMap={}}this.hashTableNameToHandle=hashTableNameToHandle;this.hashTableMap=hashTableMap}ResourceManager.prototype.addHashTable=function(name,hashTable){this.hashTableNameToHandle[name]=hashTable.handle;this.hashTableMap[hashTable.id]=hashTable};ResourceManager.prototype.getHashTableHandleByName=function(name){return this.hashTableNameToHandle[name]};ResourceManager.prototype.getHashTableById=function(id){return this.hashTableMap[id]};ResourceManager.prototype.dispose=function(){for(var key in this.hashTableMap){this.hashTableMap[key].clearAndClose();delete this.hashTableMap[key]}for(var name in this.hashTableNameToHandle){this.hashTableNameToHandle[name].dispose();delete this.hashTableNameToHandle[name]}};return ResourceManager}();var TFHUB_SEARCH_PARAM="?tfjs-format=file";var DEFAULT_MODEL_NAME="model.json";var GraphModel=function(){function GraphModel(modelUrl,loadOptions){if(loadOptions===void 0){loadOptions={}}this.modelUrl=modelUrl;this.loadOptions=loadOptions;this.version="n/a";if(loadOptions==null){this.loadOptions={}}this.resourceManager=new ResourceManager}Object.defineProperty(GraphModel.prototype,"modelVersion",{get:function(){return this.version},enumerable:true,configurable:true});Object.defineProperty(GraphModel.prototype,"inputNodes",{get:function(){return this.executor.inputNodes},enumerable:true,configurable:true});Object.defineProperty(GraphModel.prototype,"outputNodes",{get:function(){return this.executor.outputNodes},enumerable:true,configurable:true});Object.defineProperty(GraphModel.prototype,"inputs",{get:function(){return this.executor.inputs},enumerable:true,configurable:true});Object.defineProperty(GraphModel.prototype,"outputs",{get:function(){return this.executor.outputs},enumerable:true,configurable:true});Object.defineProperty(GraphModel.prototype,"weights",{get:function(){return this.executor.weightMap},enumerable:true,configurable:true});Object.defineProperty(GraphModel.prototype,"metadata",{get:function(){return this.artifacts.userDefinedMetadata},enumerable:true,configurable:true});Object.defineProperty(GraphModel.prototype,"modelSignature",{get:function(){return this.signature},enumerable:true,configurable:true});GraphModel.prototype.findIOHandler=function(){var path=this.modelUrl;if(path.load!=null){this.handler=path}else if(this.loadOptions.requestInit!=null){this.handler=tfc.io.browserHTTPRequest(path,this.loadOptions)}else{var handlers=tfc.io.getLoadHandlers(path,this.loadOptions);if(handlers.length===0){handlers.push(tfc.io.browserHTTPRequest(path,this.loadOptions))}else if(handlers.length>1){throw new Error("Found more than one ("+handlers.length+") load handlers for "+("URL '"+[path]+"'"))}this.handler=handlers[0]}};GraphModel.prototype.load=function(){return __awaiter(this,void 0,void 0,function(){var artifacts;return __generator(this,function(_a){switch(_a.label){case 0:this.findIOHandler();if(this.handler.load==null){throw new Error("Cannot proceed with model loading because the IOHandler provided "+"does not have the `load` method implemented.")}return[4,this.handler.load()];case 1:artifacts=_a.sent();return[2,this.loadSync(artifacts)]}})})};GraphModel.prototype.loadSync=function(artifacts){this.artifacts=artifacts;var graph=this.artifacts.modelTopology;var signature;if(this.artifacts.userDefinedMetadata!=null&&this.artifacts.userDefinedMetadata.signature!=null){signature=this.artifacts.userDefinedMetadata.signature}else{signature=this.artifacts.signature}this.signature=signature;this.version=graph.versions.producer+"."+graph.versions.minConsumer;var weightMap=tfc.io.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);this.executor=new GraphExecutor(OperationMapper.Instance.transformGraph(graph,this.signature));this.executor.weightMap=this.convertTensorMapToTensorsMap(weightMap);this.executor.resourceManager=this.resourceManager;if(artifacts.modelInitializer!=null&&artifacts.modelInitializer.node!=null){var initializer=OperationMapper.Instance.transformGraph(artifacts.modelInitializer);this.initializer=new GraphExecutor(initializer);this.initializer.weightMap=this.executor.weightMap;this.initializer.resourceManager=this.resourceManager;this.initializer.executeAsync({},[])}return true};GraphModel.prototype.save=function(handlerOrURL,config){return __awaiter(this,void 0,void 0,function(){var handlers;return __generator(this,function(_a){if(typeof handlerOrURL==="string"){handlers=tfc.io.getSaveHandlers(handlerOrURL);if(handlers.length===0){throw new Error("Cannot find any save handlers for URL '"+handlerOrURL+"'")}else if(handlers.length>1){throw new Error("Found more than one ("+handlers.length+") save handlers for "+("URL '"+handlerOrURL+"'"))}handlerOrURL=handlers[0]}if(handlerOrURL.save==null){throw new Error("GraphModel.save() cannot proceed because the IOHandler "+"provided does not have the `save` attribute defined.")}return[2,handlerOrURL.save(this.artifacts)]})})};GraphModel.prototype.predict=function(inputs,config){return this.execute(inputs,this.outputNodes)};GraphModel.prototype.normalizeInputs=function(inputs){if(!(inputs instanceof tfc.Tensor)&&!Array.isArray(inputs)){return inputs}inputs=Array.isArray(inputs)?inputs:[inputs];if(inputs.length!==this.inputNodes.length){throw new Error("Input tensor count mismatch,"+("the graph model has "+this.inputNodes.length+" placeholders, ")+("while there are "+inputs.length+" input tensors."))}return this.inputNodes.reduce(function(map,inputName,i){map[inputName]=inputs[i];return map},{})};GraphModel.prototype.normalizeOutputs=function(outputs){outputs=outputs||this.outputNodes;return!Array.isArray(outputs)?[outputs]:outputs};GraphModel.prototype.execute=function(inputs,outputs){inputs=this.normalizeInputs(inputs);outputs=this.normalizeOutputs(outputs);var result=this.executor.execute(inputs,outputs);return result.length>1?result:result[0]};GraphModel.prototype.executeAsync=function(inputs,outputs){return __awaiter(this,void 0,void 0,function(){var result;return __generator(this,function(_a){switch(_a.label){case 0:inputs=this.normalizeInputs(inputs);outputs=this.normalizeOutputs(outputs);return[4,this.executor.executeAsync(inputs,outputs)];case 1:result=_a.sent();return[2,result.length>1?result:result[0]]}})})};GraphModel.prototype.convertTensorMapToTensorsMap=function(map){return Object.keys(map).reduce(function(newMap,key){newMap[key]=[map[key]];return newMap},{})};GraphModel.prototype.dispose=function(){this.executor.dispose();if(this.initializer){this.initializer.dispose()}this.resourceManager.dispose()};return GraphModel}();function loadGraphModel(modelUrl,options){if(options===void 0){options={}}return __awaiter(this,void 0,void 0,function(){var model;return __generator(this,function(_a){switch(_a.label){case 0:if(modelUrl==null){throw new Error("modelUrl in loadGraphModel() cannot be null. Please provide a url "+"or an IOHandler that loads the model")}if(options==null){options={}}if(options.fromTFHub){if(modelUrl.load==null){if(!modelUrl.endsWith("/")){modelUrl=modelUrl+"/"}modelUrl=""+modelUrl+DEFAULT_MODEL_NAME+TFHUB_SEARCH_PARAM}}model=new GraphModel(modelUrl,options);return[4,model.load()];case 1:_a.sent();return[2,model]}})})}var version="3.10.0";exports.GraphModel=GraphModel;exports.deregisterOp=deregisterOp;exports.loadGraphModel=loadGraphModel;exports.registerOp=registerOp;exports.version_converter=version}).call(this)}).call(this,require("_process"),typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{},require("buffer").Buffer)},{"@tensorflow/tfjs-core":35,_process:40,buffer:38}],35:[function(require,module,exports){(function(process,global,Buffer,__argument0,__argument1,__argument2,__argument3,setImmediate){(function(){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var require$$0=require("crypto");function _interopDefaultLegacy(e){return e&&typeof e==="object"&&"default"in e?e:{default:e}}var require$$0__default=_interopDefaultLegacy(require$$0);var extendStatics=function(d,b){extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b}||function(d,b){for(var p in b)if(b.hasOwnProperty(p))d[p]=b[p]};return extendStatics(d,b)};function __extends(d,b){extendStatics(d,b);function __(){this.constructor=d}d.prototype=b===null?Object.create(b):(__.prototype=b.prototype,new __)}function __awaiter(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P(function(resolve){resolve(value)})}return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator["throw"](value))}catch(e){reject(e)}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})}function __generator(thisArg,body){var _={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]},f,y,t,g;return g={next:verb(0),throw:verb(1),return:verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}function __values(o){var s=typeof Symbol==="function"&&Symbol.iterator,m=s&&o[s],i=0;if(m)return m.call(o);if(o&&typeof o.length==="number")return{next:function(){if(o&&i>=o.length)o=void 0;return{value:o&&o[i++],done:!o}}};throw new TypeError(s?"Object is not iterable.":"Symbol.iterator is not defined.")}function __read(o,n){var m=typeof Symbol==="function"&&o[Symbol.iterator];if(!m)return o;var i=m.call(o),r,ar=[],e;try{while((n===void 0||n-- >0)&&!(r=i.next()).done)ar.push(r.value)}catch(error){e={error:error}}finally{try{if(r&&!r.done&&(m=i["return"]))m.call(i)}finally{if(e)throw e.error}}return ar}function __spread(){for(var ar=[],i=0;i<arguments.length;i++)ar=ar.concat(__read(arguments[i]));return ar}var EPSILON_FLOAT32=1e-7;var EPSILON_FLOAT16=1e-4;var DataStorage=function(){function DataStorage(backend,dataMover){this.backend=backend;this.dataMover=dataMover;this.data=new WeakMap;this.dataIdsCount=0}DataStorage.prototype.get=function(dataId){if(!this.data.has(dataId)){this.dataMover.moveData(this.backend,dataId)}return this.data.get(dataId)};DataStorage.prototype.set=function(dataId,value){this.dataIdsCount++;this.data.set(dataId,value)};DataStorage.prototype.has=function(dataId){return this.data.has(dataId)};DataStorage.prototype.delete=function(dataId){this.dataIdsCount--;return this.data.delete(dataId)};DataStorage.prototype.numDataIds=function(){return this.dataIdsCount};return DataStorage}();var KernelBackend=function(){function KernelBackend(){}KernelBackend.prototype.refCount=function(dataId){return notYetImplemented("refCount")};KernelBackend.prototype.incRef=function(dataId){return notYetImplemented("incRef")};KernelBackend.prototype.timerAvailable=function(){return true};KernelBackend.prototype.time=function(f){return notYetImplemented("time")};KernelBackend.prototype.read=function(dataId){return notYetImplemented("read")};KernelBackend.prototype.readSync=function(dataId){return notYetImplemented("readSync")};KernelBackend.prototype.numDataIds=function(){return notYetImplemented("numDataIds")};KernelBackend.prototype.disposeData=function(dataId,force){return notYetImplemented("disposeData")};KernelBackend.prototype.write=function(values,shape,dtype){return notYetImplemented("write")};KernelBackend.prototype.move=function(dataId,values,shape,dtype,refCount){return notYetImplemented("move")};KernelBackend.prototype.memory=function(){return notYetImplemented("memory")};KernelBackend.prototype.floatPrecision=function(){return notYetImplemented("floatPrecision")};KernelBackend.prototype.epsilon=function(){return this.floatPrecision()===32?EPSILON_FLOAT32:EPSILON_FLOAT16};KernelBackend.prototype.dispose=function(){return notYetImplemented("dispose")};return KernelBackend}();function notYetImplemented(kernelName){throw new Error("'"+kernelName+"' not yet implemented or not found in the registry. "+"This kernel may not be supported by the tfjs backend you have chosen")}function shuffle(array){var counter=array.length;var index=0;while(counter>0){index=Math.random()*counter|0;counter--;swap(array,counter,index)}}function shuffleCombo(array,array2){if(array.length!==array2.length){throw new Error("Array sizes must match to be shuffled together "+("First array length was "+array.length)+("Second array length was "+array2.length))}var counter=array.length;var index=0;while(counter>0){index=Math.random()*counter|0;counter--;swap(array,counter,index);swap(array2,counter,index)}}function clamp(min,x,max){return Math.max(min,Math.min(x,max))}function nearestLargerEven(val){return val%2===0?val:val+1}function swap(object,left,right){var temp=object[left];object[left]=object[right];object[right]=temp}function sum$1(arr){var sum=0;for(var i=0;i<arr.length;i++){sum+=arr[i]}return sum}function randUniform(a,b){var r=Math.random();return b*r+(1-r)*a}function distSquared(a,b){var result=0;for(var i=0;i<a.length;i++){var diff=Number(a[i])-Number(b[i]);result+=diff*diff}return result}function assert(expr,msg){if(!expr){throw new Error(typeof msg==="string"?msg:msg())}}function assertShapesMatch(shapeA,shapeB,errorMessagePrefix){if(errorMessagePrefix===void 0){errorMessagePrefix=""}assert(arraysEqual(shapeA,shapeB),function(){return errorMessagePrefix+(" Shapes "+shapeA+" and "+shapeB+" must match")})}function assertNonNull(a){assert(a!=null,function(){return"The input to the tensor constructor must be a non-null value."})}function flatten(arr,result,skipTypedArray){if(result===void 0){result=[]}if(skipTypedArray===void 0){skipTypedArray=false}if(result==null){result=[]}if(Array.isArray(arr)||isTypedArray(arr)&&!skipTypedArray){for(var i=0;i<arr.length;++i){flatten(arr[i],result,skipTypedArray)}}else{result.push(arr)}return result}function sizeFromShape(shape){if(shape.length===0){return 1}var size=shape[0];for(var i=1;i<shape.length;i++){size*=shape[i]}return size}function isScalarShape(shape){return shape.length===0}function arraysEqual(n1,n2){if(n1===n2){return true}if(n1==null||n2==null){return false}if(n1.length!==n2.length){return false}for(var i=0;i<n1.length;i++){if(n1[i]!==n2[i]){return false}}return true}function isInt(a){return a%1===0}function tanh$1(x){if(Math.tanh!=null){return Math.tanh(x)}if(x===Infinity){return 1}else if(x===-Infinity){return-1}else{var e2x=Math.exp(2*x);return(e2x-1)/(e2x+1)}}function sizeToSquarishShape(size){var width=Math.ceil(Math.sqrt(size));return[width,Math.ceil(size/width)]}function createShuffledIndices(n){var shuffledIndices=new Uint32Array(n);for(var i=0;i<n;++i){shuffledIndices[i]=i}shuffle(shuffledIndices);return shuffledIndices}function rightPad(a,size){if(size<=a.length){return a}return a+" ".repeat(size-a.length)}function repeatedTry(checkFn,delayFn,maxCounter){if(delayFn===void 0){delayFn=function(counter){return 0}}return new Promise(function(resolve,reject){var tryCount=0;var tryFn=function(){if(checkFn()){resolve();return}tryCount++;var nextBackoff=delayFn(tryCount);if(maxCounter!=null&&tryCount>=maxCounter){reject();return}setTimeout(tryFn,nextBackoff)};tryFn()})}function inferFromImplicitShape(shape,size){var shapeProd=1;var implicitIdx=-1;for(var i=0;i<shape.length;++i){if(shape[i]>=0){shapeProd*=shape[i]}else if(shape[i]===-1){if(implicitIdx!==-1){throw Error("Shapes can only have 1 implicit size. "+("Found -1 at dim "+implicitIdx+" and dim "+i))}implicitIdx=i}else if(shape[i]<0){throw Error("Shapes can not be < 0. Found "+shape[i]+" at dim "+i)}}if(implicitIdx===-1){if(size>0&&size!==shapeProd){throw Error("Size("+size+") must match the product of shape "+shape)}return shape}if(shapeProd===0){throw Error("Cannot infer the missing size in ["+shape+"] when "+"there are 0 elements")}if(size%shapeProd!==0){throw Error("The implicit shape can't be a fractional number. "+("Got "+size+" / "+shapeProd))}var newShape=shape.slice();newShape[implicitIdx]=size/shapeProd;return newShape}function parseAxisParam(axis,shape){var rank=shape.length;axis=axis==null?shape.map(function(s,i){return i}):[].concat(axis);assert(axis.every(function(ax){return ax>=-rank&&ax<rank}),function(){return"All values in axis param must be in range [-"+rank+", "+rank+") but "+("got axis "+axis)});assert(axis.every(function(ax){return isInt(ax)}),function(){return"All values in axis param must be integers but "+("got axis "+axis)});return axis.map(function(a){return a<0?rank+a:a})}function squeezeShape(shape,axis){var newShape=[];var keptDims=[];var isEmptyArray=axis!=null&&Array.isArray(axis)&&axis.length===0;var axes=axis==null||isEmptyArray?null:parseAxisParam(axis,shape).sort();var j=0;for(var i=0;i<shape.length;++i){if(axes!=null){if(axes[j]===i&&shape[i]!==1){throw new Error("Can't squeeze axis "+i+" since its dim '"+shape[i]+"' is not 1")}if((axes[j]==null||axes[j]>i)&&shape[i]===1){newShape.push(shape[i]);keptDims.push(i)}if(axes[j]<=i){j++}}if(shape[i]!==1){newShape.push(shape[i]);keptDims.push(i)}}return{newShape:newShape,keptDims:keptDims}}function getTypedArrayFromDType(dtype,size){var values=null;if(dtype==null||dtype==="float32"){values=new Float32Array(size)}else if(dtype==="int32"){values=new Int32Array(size)}else if(dtype==="bool"){values=new Uint8Array(size)}else{throw new Error("Unknown data type "+dtype)}return values}function getArrayFromDType(dtype,size){var values=null;if(dtype==null||dtype==="float32"){values=new Float32Array(size)}else if(dtype==="int32"){values=new Int32Array(size)}else if(dtype==="bool"){values=new Uint8Array(size)}else if(dtype==="string"){values=new Array(size)}else{throw new Error("Unknown data type "+dtype)}return values}function checkConversionForErrors(vals,dtype){for(var i=0;i<vals.length;i++){var num=vals[i];if(isNaN(num)||!isFinite(num)){throw Error("A tensor of type "+dtype+" being uploaded contains "+num+".")}}}function isValidDtype(dtype){return dtype==="bool"||dtype==="complex64"||dtype==="float32"||dtype==="int32"||dtype==="string"}function hasEncodingLoss(oldType,newType){if(newType==="complex64"){return false}if(newType==="float32"&&oldType!=="complex64"){return false}if(newType==="int32"&&oldType!=="float32"&&oldType!=="complex64"){return false}if(newType==="bool"&&oldType==="bool"){return false}return true}function isTypedArray(a){return a instanceof Float32Array||a instanceof Int32Array||a instanceof Uint8Array||a instanceof Uint8ClampedArray}function bytesPerElement(dtype){if(dtype==="float32"||dtype==="int32"){return 4}else if(dtype==="complex64"){return 8}else if(dtype==="bool"){return 1}else{throw new Error("Unknown dtype "+dtype)}}function bytesFromStringArray(arr){if(arr==null){return 0}var bytes=0;arr.forEach(function(x){return bytes+=x.length});return bytes}function isString(value){return typeof value==="string"||value instanceof String}function isBoolean(value){return typeof value==="boolean"}function isNumber(value){return typeof value==="number"}function inferDtype(values){if(Array.isArray(values)){return inferDtype(values[0])}if(values instanceof Float32Array){return"float32"}else if(values instanceof Int32Array||values instanceof Uint8Array||values instanceof Uint8ClampedArray){return"int32"}else if(isNumber(values)){return"float32"}else if(isString(values)){return"string"}else if(isBoolean(values)){return"bool"}return"float32"}function isFunction(f){return!!(f&&f.constructor&&f.call&&f.apply)}function nearestDivisor(size,start){for(var i=start;i<size;++i){if(size%i===0){return i}}return size}function computeStrides(shape){var rank=shape.length;if(rank<2){return[]}var strides=new Array(rank-1);strides[rank-2]=shape[rank-1];for(var i=rank-3;i>=0;--i){strides[i]=strides[i+1]*shape[i+1]}return strides}function createNestedArray(offset,shape,a,isComplex){if(isComplex===void 0){isComplex=false}var ret=new Array;if(shape.length===1){var d=shape[0]*(isComplex?2:1);for(var i=0;i<d;i++){ret[i]=a[offset+i]}}else{var d=shape[0];var rest=shape.slice(1);var len=rest.reduce(function(acc,c){return acc*c})*(isComplex?2:1);for(var i=0;i<d;i++){ret[i]=createNestedArray(offset+i*len,rest,a,isComplex)}}return ret}function toNestedArray(shape,a,isComplex){if(isComplex===void 0){isComplex=false}if(shape.length===0){return a[0]}var size=shape.reduce(function(acc,c){return acc*c})*(isComplex?2:1);if(size===0){return[]}if(size!==a.length){throw new Error("["+shape+"] does not match the input size "+a.length+(isComplex?" for a complex tensor":"")+".")}return createNestedArray(0,shape,a,isComplex)}function makeOnesTypedArray(size,dtype){var array=makeZerosTypedArray(size,dtype);for(var i=0;i<array.length;i++){array[i]=1}return array}function makeZerosTypedArray(size,dtype){if(dtype==null||dtype==="float32"||dtype==="complex64"){return new Float32Array(size)}else if(dtype==="int32"){return new Int32Array(size)}else if(dtype==="bool"){return new Uint8Array(size)}else{throw new Error("Unknown data type "+dtype)}}function makeZerosNestedTypedArray(shape,dtype){var size=shape.reduce(function(prev,curr){return prev*curr},1);if(dtype==null||dtype==="float32"){return toNestedArray(shape,new Float32Array(size))}else if(dtype==="int32"){return toNestedArray(shape,new Int32Array(size))}else if(dtype==="bool"){return toNestedArray(shape,new Uint8Array(size))}else{throw new Error("Unknown data type "+dtype)}}function assertNonNegativeIntegerDimensions(shape){shape.forEach(function(dimSize){assert(Number.isInteger(dimSize)&&dimSize>=0,function(){return"Tensor must have a shape comprised of positive integers but got "+("shape ["+shape+"].")})})}function locToIndex(locs,rank,strides){if(rank===0){return 0}else if(rank===1){return locs[0]}var index=locs[locs.length-1];for(var i=0;i<locs.length-1;++i){index+=strides[i]*locs[i]}return index}function indexToLoc(index,rank,strides){if(rank===0){return[]}else if(rank===1){return[index]}var locs=new Array(rank);for(var i=0;i<locs.length-1;++i){locs[i]=Math.floor(index/strides[i]);index-=locs[i]*strides[i]}locs[locs.length-1]=index;return locs}function isPromise(object){return object&&object.then&&typeof object.then==="function"}function warn(){var msg=[];for(var _i=0;_i<arguments.length;_i++){msg[_i]=arguments[_i]}if(!(env().getBool("IS_TEST")||env().getBool("PROD"))){console.warn.apply(console,__spread(msg))}}function log$1(){var msg=[];for(var _i=0;_i<arguments.length;_i++){msg[_i]=arguments[_i]}if(!(env().getBool("IS_TEST")||env().getBool("PROD"))){console.log.apply(console,__spread(msg))}}var TENSORFLOWJS_FLAGS_PREFIX="tfjsflags";var Environment=function(){function Environment(global){this.global=global;this.flags={};this.flagRegistry={};this.urlFlags={};this.getQueryParams=getQueryParams;this.populateURLFlags()}Environment.prototype.setPlatform=function(platformName,platform){if(this.platform!=null){warn("Platform "+this.platformName+" has already been set. "+("Overwriting the platform with "+platform+"."))}this.platformName=platformName;this.platform=platform};Environment.prototype.registerFlag=function(flagName,evaluationFn,setHook){this.flagRegistry[flagName]={evaluationFn:evaluationFn,setHook:setHook};if(this.urlFlags[flagName]!=null){var flagValue=this.urlFlags[flagName];warn("Setting feature override from URL "+flagName+": "+flagValue+".");this.set(flagName,flagValue)}};Environment.prototype.getAsync=function(flagName){return __awaiter(this,void 0,void 0,function(){var _a,_b;return __generator(this,function(_c){switch(_c.label){case 0:if(flagName in this.flags){return[2,this.flags[flagName]]}_a=this.flags;_b=flagName;return[4,this.evaluateFlag(flagName)];case 1:_a[_b]=_c.sent();return[2,this.flags[flagName]]}})})};Environment.prototype.get=function(flagName){if(flagName in this.flags){return this.flags[flagName]}var flagValue=this.evaluateFlag(flagName);if(isPromise(flagValue)){throw new Error("Flag "+flagName+" cannot be synchronously evaluated. "+"Please use getAsync() instead.")}this.flags[flagName]=flagValue;return this.flags[flagName]};Environment.prototype.getNumber=function(flagName){return this.get(flagName)};Environment.prototype.getBool=function(flagName){return this.get(flagName)};Environment.prototype.getFlags=function(){return this.flags};Object.defineProperty(Environment.prototype,"features",{get:function(){return this.flags},enumerable:true,configurable:true});Environment.prototype.set=function(flagName,value){if(this.flagRegistry[flagName]==null){throw new Error("Cannot set flag "+flagName+" as it has not been registered.")}this.flags[flagName]=value;if(this.flagRegistry[flagName].setHook!=null){this.flagRegistry[flagName].setHook(value)}};Environment.prototype.evaluateFlag=function(flagName){if(this.flagRegistry[flagName]==null){throw new Error("Cannot evaluate flag '"+flagName+"': no evaluation function found.")}return this.flagRegistry[flagName].evaluationFn()};Environment.prototype.setFlags=function(flags){this.flags=Object.assign({},flags)};Environment.prototype.reset=function(){this.flags={};this.urlFlags={};this.populateURLFlags()};Environment.prototype.populateURLFlags=function(){var _this=this;if(typeof this.global==="undefined"||typeof this.global.location==="undefined"||typeof this.global.location.search==="undefined"){return}var urlParams=this.getQueryParams(this.global.location.search);if(TENSORFLOWJS_FLAGS_PREFIX in urlParams){var keyValues=urlParams[TENSORFLOWJS_FLAGS_PREFIX].split(",");keyValues.forEach(function(keyValue){var _a=__read(keyValue.split(":"),2),key=_a[0],value=_a[1];_this.urlFlags[key]=parseValue(key,value)})}};return Environment}();function getQueryParams(queryString){var params={};queryString.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,function(s){var t=[];for(var _i=1;_i<arguments.length;_i++){t[_i-1]=arguments[_i]}decodeParam(params,t[0],t[1]);return t.join("=")});return params}function decodeParam(params,name,value){params[decodeURIComponent(name)]=decodeURIComponent(value||"")}function parseValue(flagName,value){value=value.toLowerCase();if(value==="true"||value==="false"){return value==="true"}else if(""+ +value===value){return+value}throw new Error("Could not parse value flag value "+value+" for flag "+flagName+".")}function env(){return exports.ENV}exports.ENV=null;function setEnvironmentGlobal(environment){exports.ENV=environment}var globalNameSpace;function getGlobalNamespace(){if(globalNameSpace==null){var ns=void 0;if(typeof window!=="undefined"){ns=window}else if(typeof global!=="undefined"){ns=global}else if(typeof process!=="undefined"){ns=process}else if(typeof self!=="undefined"){ns=self}else{throw new Error("Could not find a global object")}globalNameSpace=ns}return globalNameSpace}function getGlobalMap(){var ns=getGlobalNamespace();if(ns._tfGlobals==null){ns._tfGlobals=new Map}return ns._tfGlobals}function getGlobal(key,init){var globalMap=getGlobalMap();if(globalMap.has(key)){return globalMap.get(key)}else{var singleton=init();globalMap.set(key,singleton);return globalMap.get(key)}}var Abs="Abs";var Acos="Acos";var Acosh="Acosh";var Add="Add";var AddN="AddN";var All="All";var Any="Any";var ArgMax="ArgMax";var ArgMin="ArgMin";var Asin="Asin";var Asinh="Asinh";var Atan="Atan";var Atanh="Atanh";var Atan2="Atan2";var AvgPool="AvgPool";var AvgPoolGrad="AvgPoolGrad";var AvgPool3D="AvgPool3D";var AvgPool3DGrad="AvgPool3DGrad";var BatchMatMul="BatchMatMul";var BatchToSpaceND="BatchToSpaceND";var Bincount="Bincount";var BroadcastTo="BroadcastTo";var BroadcastArgs="BroadcastArgs";var Cast="Cast";var Ceil="Ceil";var ClipByValue="ClipByValue";var Complex="Complex";var ComplexAbs="ComplexAbs";var Concat="Concat";var Conv2D="Conv2D";var Conv2DBackpropFilter="Conv2DBackpropFilter";var Conv2DBackpropInput="Conv2DBackpropInput";var Conv3D="Conv3D";var Conv3DBackpropFilterV2="Conv3DBackpropFilterV2";var Conv3DBackpropInputV2="Conv3DBackpropInputV2";var Cos="Cos";var Cosh="Cosh";var Cumsum="Cumsum";var CropAndResize="CropAndResize";var DenseBincount="DenseBincount";var DepthToSpace="DepthToSpace";var DepthwiseConv2dNative="DepthwiseConv2dNative";var DepthwiseConv2dNativeBackpropFilter="DepthwiseConv2dNativeBackpropFilter";var DepthwiseConv2dNativeBackpropInput="DepthwiseConv2dNativeBackpropInput";var Diag="Diag";var Dilation2D="Dilation2D";var Dilation2DBackpropInput="Dilation2DBackpropInput";var Dilation2DBackpropFilter="Dilation2DBackpropFilter";var RealDiv="RealDiv";var Einsum="Einsum";var Elu="Elu";var EluGrad="EluGrad";var Erf="Erf";var Equal="Equal";var Exp="Exp";var ExpandDims="ExpandDims";var Expm1="Expm1";var FFT="FFT";var Fill="Fill";var FlipLeftRight="FlipLeftRight";var Floor="Floor";var FloorDiv="FloorDiv";var FusedBatchNorm="FusedBatchNorm";var GatherV2="GatherV2";var GatherNd="GatherNd";var Greater="Greater";var GreaterEqual="GreaterEqual";var Identity="Identity";var IFFT="IFFT";var Imag="Imag";var IsFinite="IsFinite";var IsInf="IsInf";var IsNan="IsNan";var LeakyRelu="LeakyRelu";var Less="Less";var LessEqual="LessEqual";var LinSpace="LinSpace";var Log="Log";var Log1p="Log1p";var LogicalAnd="LogicalAnd";var LogicalNot="LogicalNot";var LogicalOr="LogicalOr";var LogSoftmax="LogSoftmax";var LRN="LRN";var LRNGrad="LRNGrad";var Max="Max";var Maximum="Maximum";var MaxPool="MaxPool";var MaxPoolGrad="MaxPoolGrad";var MaxPool3D="MaxPool3D";var MaxPool3DGrad="MaxPool3DGrad";var MaxPoolWithArgmax="MaxPoolWithArgmax";var Mean="Mean";var Min="Min";var Minimum="Minimum";var MirrorPad="MirrorPad";var Mod="Mod";var Multinomial="Multinomial";var Multiply="Multiply";var Neg="Neg";var NotEqual="NotEqual";var NonMaxSuppressionV3="NonMaxSuppressionV3";var NonMaxSuppressionV4="NonMaxSuppressionV4";var NonMaxSuppressionV5="NonMaxSuppressionV5";var OnesLike="OnesLike";var OneHot="OneHot";var Pack="Pack";var PadV2="PadV2";var Pool="Pool";var Pow="Pow";var Prelu="Prelu";var Prod="Prod";var Range="Range";var Real="Real";var Reciprocal="Reciprocal";var Relu="Relu";var Reshape="Reshape";var ResizeNearestNeighbor="ResizeNearestNeighbor";var ResizeNearestNeighborGrad="ResizeNearestNeighborGrad";var ResizeBilinear="ResizeBilinear";var ResizeBilinearGrad="ResizeBilinearGrad";var Relu6="Relu6";var Reverse="Reverse";var Round="Round";var Rsqrt="Rsqrt";var ScatterNd="ScatterNd";var Select="Select";var Selu="Selu";var Slice="Slice";var Sin="Sin";var Sinh="Sinh";var Sign="Sign";var Sigmoid="Sigmoid";var Softplus="Softplus";var Sqrt="Sqrt";var Sum="Sum";var SpaceToBatchND="SpaceToBatchND";var SplitV="SplitV";var Softmax="Softmax";var SparseFillEmptyRows="SparseFillEmptyRows";var SparseReshape="SparseReshape";var SparseSegmentMean="SparseSegmentMean";var SparseSegmentSum="SparseSegmentSum";var SparseToDense="SparseToDense";var SquaredDifference="SquaredDifference";var Square="Square";var StridedSlice="StridedSlice";var StringNGrams="StringNGrams";var StringSplit="StringSplit";var StringToHashBucketFast="StringToHashBucketFast";var Sub="Sub";var Tan="Tan";var Tanh="Tanh";var Tile="Tile";var TopK="TopK";var Transform="Transform";var Transpose="Transpose";var Unique="Unique";var Unpack="Unpack";var UnsortedSegmentSum="UnsortedSegmentSum";var ZerosLike="ZerosLike";var Step="Step";var FromPixels="FromPixels";var RotateWithOffset="RotateWithOffset";var _FusedMatMul="_FusedMatMul";var FusedConv2D="FusedConv2D";var FusedDepthwiseConv2D="FusedDepthwiseConv2D";var kernelRegistry=getGlobal("kernelRegistry",function(){return new Map});var gradRegistry=getGlobal("gradRegistry",function(){return new Map});function getKernel(kernelName,backendName){var key=makeKey(kernelName,backendName);return kernelRegistry.get(key)}function getGradient(kernelName){return gradRegistry.get(kernelName)}function getKernelsForBackend(backendName){var it=kernelRegistry.entries();var result=[];while(true){var _a=it.next(),done=_a.done,value=_a.value;if(done){break}var _b=__read(value,2),key=_b[0],config=_b[1];var _c=__read(key.split("_"),1),backend=_c[0];if(backend===backendName){result.push(config)}}return result}function registerKernel(config){var kernelName=config.kernelName,backendName=config.backendName;var key=makeKey(kernelName,backendName);if(kernelRegistry.has(key)){warn("The kernel '"+kernelName+"' for backend "+("'"+backendName+"' is already registered"))}kernelRegistry.set(key,config)}function registerGradient(config){var kernelName=config.kernelName;if(gradRegistry.has(kernelName)){if(env().getBool("DEBUG")){warn("Overriding the gradient for '"+kernelName+"'")}}gradRegistry.set(kernelName,config)}function unregisterKernel(kernelName,backendName){var key=makeKey(kernelName,backendName);if(!kernelRegistry.has(key)){throw new Error("The kernel '"+kernelName+"' for backend "+("'"+backendName+"' is not registered"))}kernelRegistry.delete(key)}function unregisterGradient(kernelName){if(!gradRegistry.has(kernelName)){throw new Error("The gradient '"+kernelName+"' for backend is not registered")}gradRegistry.delete(kernelName)}function copyRegisteredKernels(registeredBackendName,newBackendName){var kernels=getKernelsForBackend(registeredBackendName);kernels.forEach(function(kernelConfig){var newKernelConfig=Object.assign({},kernelConfig,{backendName:newBackendName});registerKernel(newKernelConfig)})}function makeKey(kernelName,backendName){return backendName+"_"+kernelName}var long=Long$1;var wasm=null;try{wasm=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([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])),{}).exports}catch(e){}function Long$1(low,high,unsigned){this.low=low|0;this.high=high|0;this.unsigned=!!unsigned}Long$1.prototype.__isLong__;Object.defineProperty(Long$1.prototype,"__isLong__",{value:true});function isLong(obj){return(obj&&obj["__isLong__"])===true}Long$1.isLong=isLong;var INT_CACHE={};var UINT_CACHE={};function fromInt(value,unsigned){var obj,cachedObj,cache;if(unsigned){value>>>=0;if(cache=0<=value&&value<256){cachedObj=UINT_CACHE[value];if(cachedObj)return cachedObj}obj=fromBits(value,(value|0)<0?-1:0,true);if(cache)UINT_CACHE[value]=obj;return obj}else{value|=0;if(cache=-128<=value&&value<128){cachedObj=INT_CACHE[value];if(cachedObj)return cachedObj}obj=fromBits(value,value<0?-1:0,false);if(cache)INT_CACHE[value]=obj;return obj}}Long$1.fromInt=fromInt;function fromNumber(value,unsigned){if(isNaN(value))return unsigned?UZERO:ZERO;if(unsigned){if(value<0)return UZERO;if(value>=TWO_PWR_64_DBL)return MAX_UNSIGNED_VALUE}else{if(value<=-TWO_PWR_63_DBL)return MIN_VALUE;if(value+1>=TWO_PWR_63_DBL)return MAX_VALUE}if(value<0)return fromNumber(-value,unsigned).neg();return fromBits(value%TWO_PWR_32_DBL|0,value/TWO_PWR_32_DBL|0,unsigned)}Long$1.fromNumber=fromNumber;function fromBits(lowBits,highBits,unsigned){return new Long$1(lowBits,highBits,unsigned)}Long$1.fromBits=fromBits;var pow_dbl=Math.pow;function fromString(str,unsigned,radix){if(str.length===0)throw Error("empty string");if(str==="NaN"||str==="Infinity"||str==="+Infinity"||str==="-Infinity")return ZERO;if(typeof unsigned==="number"){radix=unsigned,unsigned=false}else{unsigned=!!unsigned}radix=radix||10;if(radix<2||36<radix)throw RangeError("radix");var p;if((p=str.indexOf("-"))>0)throw Error("interior hyphen");else if(p===0){return fromString(str.substring(1),unsigned,radix).neg()}var radixToPower=fromNumber(pow_dbl(radix,8));var result=ZERO;for(var i=0;i<str.length;i+=8){var size=Math.min(8,str.length-i),value=parseInt(str.substring(i,i+size),radix);if(size<8){var power=fromNumber(pow_dbl(radix,size));result=result.mul(power).add(fromNumber(value))}else{result=result.mul(radixToPower);result=result.add(fromNumber(value))}}result.unsigned=unsigned;return result}Long$1.fromString=fromString;function fromValue(val,unsigned){if(typeof val==="number")return fromNumber(val,unsigned);if(typeof val==="string")return fromString(val,unsigned);return fromBits(val.low,val.high,typeof unsigned==="boolean"?unsigned:val.unsigned)}Long$1.fromValue=fromValue;var TWO_PWR_16_DBL=1<<16;var TWO_PWR_24_DBL=1<<24;var TWO_PWR_32_DBL=TWO_PWR_16_DBL*TWO_PWR_16_DBL;var TWO_PWR_64_DBL=TWO_PWR_32_DBL*TWO_PWR_32_DBL;var TWO_PWR_63_DBL=TWO_PWR_64_DBL/2;var TWO_PWR_24=fromInt(TWO_PWR_24_DBL);var ZERO=fromInt(0);Long$1.ZERO=ZERO;var UZERO=fromInt(0,true);Long$1.UZERO=UZERO;var ONE=fromInt(1);Long$1.ONE=ONE;var UONE=fromInt(1,true);Long$1.UONE=UONE;var NEG_ONE=fromInt(-1);Long$1.NEG_ONE=NEG_ONE;var MAX_VALUE=fromBits(4294967295|0,2147483647|0,false);Long$1.MAX_VALUE=MAX_VALUE;var MAX_UNSIGNED_VALUE=fromBits(4294967295|0,4294967295|0,true);Long$1.MAX_UNSIGNED_VALUE=MAX_UNSIGNED_VALUE;var MIN_VALUE=fromBits(0,2147483648|0,false);Long$1.MIN_VALUE=MIN_VALUE;var LongPrototype=Long$1.prototype;LongPrototype.toInt=function toInt(){return this.unsigned?this.low>>>0:this.low};LongPrototype.toNumber=function toNumber(){if(this.unsigned)return(this.high>>>0)*TWO_PWR_32_DBL+(this.low>>>0);return this.high*TWO_PWR_32_DBL+(this.low>>>0)};LongPrototype.toString=function toString(radix){radix=radix||10;if(radix<2||36<radix)throw RangeError("radix");if(this.isZero())return"0";if(this.isNegative()){if(this.eq(MIN_VALUE)){var radixLong=fromNumber(radix),div=this.div(radixLong),rem1=div.mul(radixLong).sub(this);return div.toString(radix)+rem1.toInt().toString(radix)}else return"-"+this.neg().toString(radix)}var radixToPower=fromNumber(pow_dbl(radix,6),this.unsigned),rem=this;var result="";while(true){var remDiv=rem.div(radixToPower),intval=rem.sub(remDiv.mul(radixToPower)).toInt()>>>0,digits=intval.toString(radix);rem=remDiv;if(rem.isZero())return digits+result;else{while(digits.length<6)digits="0"+digits;result=""+digits+result}}};LongPrototype.getHighBits=function getHighBits(){return this.high};LongPrototype.getHighBitsUnsigned=function getHighBitsUnsigned(){return this.high>>>0};LongPrototype.getLowBits=function getLowBits(){return this.low};LongPrototype.getLowBitsUnsigned=function getLowBitsUnsigned(){return this.low>>>0};LongPrototype.getNumBitsAbs=function getNumBitsAbs(){if(this.isNegative())return this.eq(MIN_VALUE)?64:this.neg().getNumBitsAbs();var val=this.high!=0?this.high:this.low;for(var bit=31;bit>0;bit--)if((val&1<<bit)!=0)break;return this.high!=0?bit+33:bit+1};LongPrototype.isZero=function isZero(){return this.high===0&&this.low===0};LongPrototype.eqz=LongPrototype.isZero;LongPrototype.isNegative=function isNegative(){return!this.unsigned&&this.high<0};LongPrototype.isPositive=function isPositive(){return this.unsigned||this.high>=0};LongPrototype.isOdd=function isOdd(){return(this.low&1)===1};LongPrototype.isEven=function isEven(){return(this.low&1)===0};LongPrototype.equals=function equals(other){if(!isLong(other))other=fromValue(other);if(this.unsigned!==other.unsigned&&this.high>>>31===1&&other.high>>>31===1)return false;return this.high===other.high&&this.low===other.low};LongPrototype.eq=LongPrototype.equals;LongPrototype.notEquals=function notEquals(other){return!this.eq(other)};LongPrototype.neq=LongPrototype.notEquals;LongPrototype.ne=LongPrototype.notEquals;LongPrototype.lessThan=function lessThan(other){return this.comp(other)<0};LongPrototype.lt=LongPrototype.lessThan;LongPrototype.lessThanOrEqual=function lessThanOrEqual(other){return this.comp(other)<=0};LongPrototype.lte=LongPrototype.lessThanOrEqual;LongPrototype.le=LongPrototype.lessThanOrEqual;LongPrototype.greaterThan=function greaterThan(other){return this.comp(other)>0};LongPrototype.gt=LongPrototype.greaterThan;LongPrototype.greaterThanOrEqual=function greaterThanOrEqual(other){return this.comp(other)>=0};LongPrototype.gte=LongPrototype.greaterThanOrEqual;LongPrototype.ge=LongPrototype.greaterThanOrEqual;LongPrototype.compare=function compare(other){if(!isLong(other))other=fromValue(other);if(this.eq(other))return 0;var thisNeg=this.isNegative(),otherNeg=other.isNegative();if(thisNeg&&!otherNeg)return-1;if(!thisNeg&&otherNeg)return 1;if(!this.unsigned)return this.sub(other).isNegative()?-1:1;return other.high>>>0>this.high>>>0||other.high===this.high&&other.low>>>0>this.low>>>0?-1:1};LongPrototype.comp=LongPrototype.compare;LongPrototype.negate=function negate(){if(!this.unsigned&&this.eq(MIN_VALUE))return MIN_VALUE;return this.not().add(ONE)};LongPrototype.neg=LongPrototype.negate;LongPrototype.add=function add(addend){if(!isLong(addend))addend=fromValue(addend);var a48=this.high>>>16;var a32=this.high&65535;var a16=this.low>>>16;var a00=this.low&65535;var b48=addend.high>>>16;var b32=addend.high&65535;var b16=addend.low>>>16;var b00=addend.low&65535;var c48=0,c32=0,c16=0,c00=0;c00+=a00+b00;c16+=c00>>>16;c00&=65535;c16+=a16+b16;c32+=c16>>>16;c16&=65535;c32+=a32+b32;c48+=c32>>>16;c32&=65535;c48+=a48+b48;c48&=65535;return fromBits(c16<<16|c00,c48<<16|c32,this.unsigned)};LongPrototype.subtract=function subtract(subtrahend){if(!isLong(subtrahend))subtrahend=fromValue(subtrahend);return this.add(subtrahend.neg())};LongPrototype.sub=LongPrototype.subtract;LongPrototype.multiply=function multiply(multiplier){if(this.isZero())return ZERO;if(!isLong(multiplier))multiplier=fromValue(multiplier);if(wasm){var low=wasm.mul(this.low,this.high,multiplier.low,multiplier.high);return fromBits(low,wasm.get_high(),this.unsigned)}if(multiplier.isZero())return ZERO;if(this.eq(MIN_VALUE))return multiplier.isOdd()?MIN_VALUE:ZERO;if(multiplier.eq(MIN_VALUE))return this.isOdd()?MIN_VALUE:ZERO;if(this.isNegative()){if(multiplier.isNegative())return this.neg().mul(multiplier.neg());else return this.neg().mul(multiplier).neg()}else if(multiplier.isNegative())return this.mul(multiplier.neg()).neg();if(this.lt(TWO_PWR_24)&&multiplier.lt(TWO_PWR_24))return fromNumber(this.toNumber()*multiplier.toNumber(),this.unsigned);var a48=this.high>>>16;var a32=this.high&65535;var a16=this.low>>>16;var a00=this.low&65535;var b48=multiplier.high>>>16;var b32=multiplier.high&65535;var b16=multiplier.low>>>16;var b00=multiplier.low&65535;var c48=0,c32=0,c16=0,c00=0;c00+=a00*b00;c16+=c00>>>16;c00&=65535;c16+=a16*b00;c32+=c16>>>16;c16&=65535;c16+=a00*b16;c32+=c16>>>16;c16&=65535;c32+=a32*b00;c48+=c32>>>16;c32&=65535;c32+=a16*b16;c48+=c32>>>16;c32&=65535;c32+=a00*b32;c48+=c32>>>16;c32&=65535;c48+=a48*b00+a32*b16+a16*b32+a00*b48;c48&=65535;return fromBits(c16<<16|c00,c48<<16|c32,this.unsigned)};LongPrototype.mul=LongPrototype.multiply;LongPrototype.divide=function divide(divisor){if(!isLong(divisor))divisor=fromValue(divisor);if(divisor.isZero())throw Error("division by zero");if(wasm){if(!this.unsigned&&this.high===-2147483648&&divisor.low===-1&&divisor.high===-1){return this}var low=(this.unsigned?wasm.div_u:wasm.div_s)(this.low,this.high,divisor.low,divisor.high);return fromBits(low,wasm.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?UZERO:ZERO;var approx,rem,res;if(!this.unsigned){if(this.eq(MIN_VALUE)){if(divisor.eq(ONE)||divisor.eq(NEG_ONE))return MIN_VALUE;else if(divisor.eq(MIN_VALUE))return ONE;else{var halfThis=this.shr(1);approx=halfThis.div(divisor).shl(1);if(approx.eq(ZERO)){return divisor.isNegative()?ONE:NEG_ONE}else{rem=this.sub(divisor.mul(approx));res=approx.add(rem.div(divisor));return res}}}else if(divisor.eq(MIN_VALUE))return this.unsigned?UZERO:ZERO;if(this.isNegative()){if(divisor.isNegative())return this.neg().div(divisor.neg());return this.neg().div(divisor).neg()}else if(divisor.isNegative())return this.div(divisor.neg()).neg();res=ZERO}else{if(!divisor.unsigned)divisor=divisor.toUnsigned();if(divisor.gt(this))return UZERO;if(divisor.gt(this.shru(1)))return UONE;res=UZERO}rem=this;while(rem.gte(divisor)){approx=Math.max(1,Math.floor(rem.toNumber()/divisor.toNumber()));var log2=Math.ceil(Math.log(approx)/Math.LN2),delta=log2<=48?1:pow_dbl(2,log2-48),approxRes=fromNumber(approx),approxRem=approxRes.mul(divisor);while(approxRem.isNegative()||approxRem.gt(rem)){approx-=delta;approxRes=fromNumber(approx,this.unsigned);approxRem=approxRes.mul(divisor)}if(approxRes.isZero())approxRes=ONE;res=res.add(approxRes);rem=rem.sub(approxRem)}return res};LongPrototype.div=LongPrototype.divide;LongPrototype.modulo=function modulo(divisor){if(!isLong(divisor))divisor=fromValue(divisor);if(wasm){var low=(this.unsigned?wasm.rem_u:wasm.rem_s)(this.low,this.high,divisor.low,divisor.high);return fromBits(low,wasm.get_high(),this.unsigned)}return this.sub(this.div(divisor).mul(divisor))};LongPrototype.mod=LongPrototype.modulo;LongPrototype.rem=LongPrototype.modulo;LongPrototype.not=function not(){return fromBits(~this.low,~this.high,this.unsigned)};LongPrototype.and=function and(other){if(!isLong(other))other=fromValue(other);return fromBits(this.low&other.low,this.high&other.high,this.unsigned)};LongPrototype.or=function or(other){if(!isLong(other))other=fromValue(other);return fromBits(this.low|other.low,this.high|other.high,this.unsigned)};LongPrototype.xor=function xor(other){if(!isLong(other))other=fromValue(other);return fromBits(this.low^other.low,this.high^other.high,this.unsigned)};LongPrototype.shiftLeft=function shiftLeft(numBits){if(isLong(numBits))numBits=numBits.toInt();if((numBits&=63)===0)return this;else if(numBits<32)return fromBits(this.low<<numBits,this.high<<numBits|this.low>>>32-numBits,this.unsigned);else return fromBits(0,this.low<<numBits-32,this.unsigned)};LongPrototype.shl=LongPrototype.shiftLeft;LongPrototype.shiftRight=function shiftRight(numBits){if(isLong(numBits))numBits=numBits.toInt();if((numBits&=63)===0)return this;else if(numBits<32)return fromBits(this.low>>>numBits|this.high<<32-numBits,this.high>>numBits,this.unsigned);else return fromBits(this.high>>numBits-32,this.high>=0?0:-1,this.unsigned)};LongPrototype.shr=LongPrototype.shiftRight;LongPrototype.shiftRightUnsigned=function shiftRightUnsigned(numBits){if(isLong(numBits))numBits=numBits.toInt();numBits&=63;if(numBits===0)return this;else{var high=this.high;if(numBits<32){var low=this.low;return fromBits(low>>>numBits|high<<32-numBits,high>>>numBits,this.unsigned)}else if(numBits===32)return fromBits(high,0,this.unsigned);else return fromBits(high>>>numBits-32,0,this.unsigned)}};LongPrototype.shru=LongPrototype.shiftRightUnsigned;LongPrototype.shr_u=LongPrototype.shiftRightUnsigned;LongPrototype.toSigned=function toSigned(){if(!this.unsigned)return this;return fromBits(this.low,this.high,false)};LongPrototype.toUnsigned=function toUnsigned(){if(this.unsigned)return this;return fromBits(this.low,this.high,true)};LongPrototype.toBytes=function toBytes(le){return le?this.toBytesLE():this.toBytesBE()};LongPrototype.toBytesLE=function toBytesLE(){var hi=this.high,lo=this.low;return[lo&255,lo>>>8&255,lo>>>16&255,lo>>>24,hi&255,hi>>>8&255,hi>>>16&255,hi>>>24]};LongPrototype.toBytesBE=function toBytesBE(){var hi=this.high,lo=this.low;return[hi>>>24,hi>>>16&255,hi>>>8&255,hi&255,lo>>>24,lo>>>16&255,lo>>>8&255,lo&255]};Long$1.fromBytes=function fromBytes(bytes,unsigned,le){return le?Long$1.fromBytesLE(bytes,unsigned):Long$1.fromBytesBE(bytes,unsigned)};Long$1.fromBytesLE=function fromBytesLE(bytes,unsigned){return new Long$1(bytes[0]|bytes[1]<<8|bytes[2]<<16|bytes[3]<<24,bytes[4]|bytes[5]<<8|bytes[6]<<16|bytes[7]<<24,unsigned)};Long$1.fromBytesBE=function fromBytesBE(bytes,unsigned){return new Long$1(bytes[4]<<24|bytes[5]<<16|bytes[6]<<8|bytes[7],bytes[0]<<24|bytes[1]<<16|bytes[2]<<8|bytes[3],unsigned)};var LongExports=Object.assign(Object.create(null),long,{default:long});var Long=long||LongExports;function hexToLong(hex){return Long.fromString(hex,true,16)}var k0=hexToLong("c3a5c85c97cb3127");var k1=hexToLong("b492b66fbe98f273");var k2=hexToLong("9ae16a3b2f90404f");function shiftMix(val){return val.xor(val.shru(47))}function fetch$2(s,offset,numBytes){var bytes=s.slice(offset,offset+numBytes);return Long.fromBytes(Array.from(bytes),true,true)}function fetch64(s,offset){return fetch$2(s,offset,8)}function fetch32(s,offset){return fetch$2(s,offset,4)}function rotate64(val,shift){return shift===0?val:val.shru(shift).or(val.shl(64-shift))}function hashLen16(u,v,mul){if(mul===void 0){mul=hexToLong("9ddfea08eb382d69")}var a=u.xor(v).mul(mul);a=a.xor(a.shru(47));var b=v.xor(a).mul(mul);b=b.xor(b.shru(47));b=b.mul(mul);return b}function weakHashLen32WithSeeds(w,x,y,z,a,b){a=a.add(w);b=rotate64(b.add(a).add(z),21);var c=a;a=a.add(x);a=a.add(y);b=b.add(rotate64(a,44));return[a.add(z),b.add(c)]}function weakHashLen32WithSeedsStr(s,offset,a,b){return weakHashLen32WithSeeds(fetch64(s,offset),fetch64(s,offset+8),fetch64(s,offset+16),fetch64(s,offset+24),a,b)}function hashLen0to16(s,len){if(len===void 0){len=s.length}if(len>=8){var mul=k2.add(len*2);var a=fetch64(s,0).add(k2);var b=fetch64(s,len-8);var c=rotate64(b,37).mul(mul).add(a);var d=rotate64(a,25).add(b).mul(mul);return hashLen16(c,d,mul)}if(len>=4){var mul=k2.add(len*2);var a=fetch32(s,0);return hashLen16(a.shl(3).add(len),fetch32(s,len-4),mul)}if(len>0){var a=s[0];var b=s[len>>1];var c=s[len-1];var y=a+(b<<8);var z=len+(c<<2);return shiftMix(k2.mul(y).xor(k0.mul(z))).mul(k2)}return k2}function hashLen17to32(s,len){if(len===void 0){len=s.length}var mul=k2.add(len*2);var a=fetch64(s,0).mul(k1);var b=fetch64(s,8);var c=fetch64(s,len-8).mul(mul);var d=fetch64(s,len-16).mul(k2);return hashLen16(rotate64(a.add(b),43).add(rotate64(c,30)).add(d),a.add(rotate64(b.add(k2),18)).add(c),mul)}function hashLen33to64(s,len){if(len===void 0){len=s.length}var mul=k2.add(len*2);var a=fetch64(s,0).mul(k2);var b=fetch64(s,8);var c=fetch64(s,len-8).mul(mul);var d=fetch64(s,len-16).mul(k2);var y=rotate64(a.add(b),43).add(rotate64(c,30)).add(d);var z=hashLen16(y,a.add(rotate64(b.add(k2),18)).add(c),mul);var e=fetch64(s,16).mul(mul);var f=fetch64(s,24);var g=y.add(fetch64(s,len-32)).mul(mul);var h=z.add(fetch64(s,len-24)).mul(mul);return hashLen16(rotate64(e.add(f),43).add(rotate64(g,30)).add(h),e.add(rotate64(f.add(a),18)).add(g),mul)}function fingerPrint64(s,len){var _a,_b;if(len===void 0){len=s.length}var seed=Long.fromNumber(81,true);if(len<=32){if(len<=16){return hashLen0to16(s,len)}else{return hashLen17to32(s,len)}}else if(len<=64){return hashLen33to64(s,len)}var x=seed;var y=seed.mul(k1).add(113);var z=shiftMix(y.mul(k2).add(113)).mul(k2);var v=[Long.UZERO,Long.UZERO];var w=[Long.UZERO,Long.UZERO];x=x.mul(k2).add(fetch64(s,0));var offset=0;var end=(len-1>>6)*64;var last64=end+(len-1&63)-63;do{x=rotate64(x.add(y).add(v[0]).add(fetch64(s,offset+8)),37).mul(k1);y=rotate64(y.add(v[1]).add(fetch64(s,offset+48)),42).mul(k1);x=x.xor(w[1]);y=y.add(v[0]).add(fetch64(s,offset+40));z=rotate64(z.add(w[0]),33).mul(k1);v=weakHashLen32WithSeedsStr(s,offset,v[1].mul(k1),x.add(w[0]));w=weakHashLen32WithSeedsStr(s,offset+32,z.add(w[1]),y.add(fetch64(s,offset+16)));_a=__read([x,z],2),z=_a[0],x=_a[1];offset+=64}while(offset!==end);var mul=k1.add(z.and(255).shl(1));offset=last64;w[0]=w[0].add(len-1&63);v[0]=v[0].add(w[0]);w[0]=w[0].add(v[0]);x=rotate64(x.add(y).add(v[0]).add(fetch64(s,offset+8)),37).mul(mul);y=rotate64(y.add(v[1]).add(fetch64(s,offset+48)),42).mul(mul);x=x.xor(w[1].mul(9));y=y.add(v[0].mul(9).add(fetch64(s,offset+40)));z=rotate64(z.add(w[0]),33).mul(mul);v=weakHashLen32WithSeedsStr(s,offset,v[1].mul(mul),x.add(w[0]));w=weakHashLen32WithSeedsStr(s,offset+32,z.add(w[1]),y.add(fetch64(s,offset+16)));_b=__read([x,z],2),z=_b[0],x=_b[1];return hashLen16(hashLen16(v[0],w[0],mul).add(shiftMix(y).mul(k0)).add(z),hashLen16(v[1],w[1],mul).add(x),mul)}function createScalarValue(value,dtype){if(dtype==="string"){return encodeString(value)}return toTypedArray([value],dtype)}function noConversionNeeded(a,dtype){return a instanceof Float32Array&&dtype==="float32"||a instanceof Int32Array&&dtype==="int32"||a instanceof Uint8Array&&dtype==="bool"}function toTypedArray(a,dtype){if(dtype==="string"){throw new Error("Cannot convert a string[] to a TypedArray")}if(Array.isArray(a)){a=flatten(a)}if(env().getBool("DEBUG")){checkConversionForErrors(a,dtype)}if(noConversionNeeded(a,dtype)){return a}if(dtype==null||dtype==="float32"||dtype==="complex64"){return new Float32Array(a)}else if(dtype==="int32"){return new Int32Array(a)}else if(dtype==="bool"){var bool=new Uint8Array(a.length);for(var i=0;i<bool.length;++i){if(Math.round(a[i])!==0){bool[i]=1}}return bool}else{throw new Error("Unknown data type "+dtype)}}function now(){return env().platform.now()}function fetch$1(path,requestInits){return env().platform.fetch(path,requestInits)}function encodeString(s,encoding){if(encoding===void 0){encoding="utf-8"}encoding=encoding||"utf-8";return env().platform.encode(s,encoding)}function decodeString(bytes,encoding){if(encoding===void 0){encoding="utf-8"}encoding=encoding||"utf-8";return env().platform.decode(bytes,encoding)}var util={__proto__:null,createScalarValue:createScalarValue,toTypedArray:toTypedArray,now:now,fetch:fetch$1,encodeString:encodeString,decodeString:decodeString,shuffle:shuffle,shuffleCombo:shuffleCombo,clamp:clamp,nearestLargerEven:nearestLargerEven,swap:swap,sum:sum$1,randUniform:randUniform,distSquared:distSquared,assert:assert,assertShapesMatch:assertShapesMatch,assertNonNull:assertNonNull,flatten:flatten,sizeFromShape:sizeFromShape,isScalarShape:isScalarShape,arraysEqual:arraysEqual,isInt:isInt,tanh:tanh$1,sizeToSquarishShape:sizeToSquarishShape,createShuffledIndices:createShuffledIndices,rightPad:rightPad,repeatedTry:repeatedTry,inferFromImplicitShape:inferFromImplicitShape,parseAxisParam:parseAxisParam,squeezeShape:squeezeShape,getTypedArrayFromDType:getTypedArrayFromDType,getArrayFromDType:getArrayFromDType,checkConversionForErrors:checkConversionForErrors,isValidDtype:isValidDtype,hasEncodingLoss:hasEncodingLoss,isTypedArray:isTypedArray,bytesPerElement:bytesPerElement,bytesFromStringArray:bytesFromStringArray,isString:isString,isBoolean:isBoolean,isNumber:isNumber,inferDtype:inferDtype,isFunction:isFunction,nearestDivisor:nearestDivisor,computeStrides:computeStrides,toNestedArray:toNestedArray,makeOnesTypedArray:makeOnesTypedArray,makeZerosTypedArray:makeZerosTypedArray,makeZerosNestedTypedArray:makeZerosNestedTypedArray,assertNonNegativeIntegerDimensions:assertNonNegativeIntegerDimensions,locToIndex:locToIndex,indexToLoc:indexToLoc,isPromise:isPromise,hexToLong:hexToLong,fingerPrint64:fingerPrint64};var Profiler=function(){function Profiler(backendTimer,logger){this.backendTimer=backendTimer;this.logger=logger;if(logger==null){this.logger=new Logger}}Profiler.prototype.profileKernel=function(kernelName,inputs,f){var e_1,_a;var outputs;var holdResultWrapperFn=function(){outputs=f()};var timer;var start=now();if(this.backendTimer.timerAvailable()){timer=this.backendTimer.time(holdResultWrapperFn)}else{holdResultWrapperFn();try{for(var outputs_1=__values(outputs),outputs_1_1=outputs_1.next();!outputs_1_1.done;outputs_1_1=outputs_1.next()){var output=outputs_1_1.value;output.dataSync()}}catch(e_1_1){e_1={error:e_1_1}}finally{try{if(outputs_1_1&&!outputs_1_1.done&&(_a=outputs_1.return))_a.call(outputs_1)}finally{if(e_1)throw e_1.error}}timer=Promise.resolve({kernelMs:now()-start})}if(env().getBool("CHECK_COMPUTATION_FOR_ERRORS")){var _loop_1=function(i){var output=outputs[i];output.data().then(function(tensorVals){checkComputationForErrors(tensorVals,output.dtype,kernelName)})};for(var i=0;i<outputs.length;i++){_loop_1(i)}}var kernelProfile={kernelName:kernelName,outputs:outputs,inputs:inputs,timeMs:timer.then(function(timing){return timing.kernelMs}),extraInfo:timer.then(function(timing){return timing.getExtraProfileInfo!=null?timing.getExtraProfileInfo():""})};return kernelProfile};Profiler.prototype.logKernelProfile=function(kernelProfile){var _this=this;var kernelName=kernelProfile.kernelName,outputs=kernelProfile.outputs,timeMs=kernelProfile.timeMs,inputs=kernelProfile.inputs,extraInfo=kernelProfile.extraInfo;outputs.forEach(function(result){Promise.all([result.data(),timeMs,extraInfo]).then(function(valueContainer){_this.logger.logKernelProfile(kernelName,result,valueContainer[0],valueContainer[1],inputs,valueContainer[2])})})};return Profiler}();function checkComputationForErrors(vals,dtype,kernelName){if(dtype!=="float32"){return false}for(var i=0;i<vals.length;i++){var num=vals[i];if(isNaN(num)||!isFinite(num)){console.warn("Found "+num+" in the result of '"+kernelName+"'");return true}}return false}var Logger=function(){function Logger(){}Logger.prototype.logKernelProfile=function(name,result,vals,timeMs,inputs,extraInfo){var time=typeof timeMs==="number"?rightPad(timeMs+"ms",9):timeMs["error"];var paddedName=rightPad(name,25);var rank=result.rank;var size=result.size;var shape=rightPad(result.shape.toString(),14);var inputShapesDescription="";for(var name_1 in inputs){var input=inputs[name_1];if(input!=null){var inputShape=input.shape||result.shape;var inputRank=inputShape.length;inputShapesDescription+=name_1+": "+inputRank+"D "+(inputRank>0?inputShape:"")+" "}}console.log("%c"+paddedName+"\t%c"+time+"\t%c"+rank+"D "+shape+"\t%c"+size+"\t%c"+inputShapesDescription+"\t%c"+extraInfo,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")};return Logger}();function getFilteredNodesXToY(tape,xs,y){var tensorsFromX={};var nodesFromX={};for(var i=0;i<xs.length;i++){tensorsFromX[xs[i].id]=true}for(var i=0;i<tape.length;i++){var node=tape[i];var nodeInputs=node.inputs;for(var inputName in nodeInputs){var input=nodeInputs[inputName];var anyInputFromX=false;for(var j=0;j<xs.length;j++){if(tensorsFromX[input.id]){node.outputs.forEach(function(output){return tensorsFromX[output.id]=true});anyInputFromX=true;nodesFromX[node.id]=true;break}}if(anyInputFromX){break}}}var tensorsLeadToY={};tensorsLeadToY[y.id]=true;var nodesToY={};for(var i=tape.length-1;i>=0;i--){var node=tape[i];var nodeInputs=node.inputs;for(var j=0;j<node.outputs.length;j++){if(tensorsLeadToY[node.outputs[j].id]){for(var inputName in nodeInputs){tensorsLeadToY[nodeInputs[inputName].id]=true;nodesToY[node.id]=true}break}}}var filteredTape=[];for(var i=0;i<tape.length;i++){var node=tape[i];if(nodesFromX[node.id]&&nodesToY[node.id]){var prunedInputs={};for(var inputName in node.inputs){var nodeInput=node.inputs[inputName];if(tensorsFromX[nodeInput.id]){prunedInputs[inputName]=nodeInput}}var prunedNode=Object.assign({},node);prunedNode.inputs=prunedInputs;prunedNode.outputs=node.outputs;filteredTape.push(prunedNode)}}return filteredTape}function backpropagateGradients(tensorAccumulatedGradientMap,filteredTape,tidy,add){var _loop_1=function(i){var node=filteredTape[i];var dys=[];node.outputs.forEach(function(o){var gradTensor=tensorAccumulatedGradientMap[o.id];if(gradTensor!=null){dys.push(gradTensor)}else{dys.push(null)}});if(node.gradient==null){throw new Error("Cannot compute gradient: gradient function not found "+("for "+node.kernelName+"."))}var inputGradients=node.gradient(dys);var _loop_2=function(inputName){if(!(inputName in inputGradients)){throw new Error("Cannot backprop through input "+inputName+". "+("Available gradients found: "+Object.keys(inputGradients)+"."))}var dx=tidy(function(){return inputGradients[inputName]()});if(dx.dtype!=="float32"){throw new Error("Error in gradient for op "+node.kernelName+". The gradient of input "+(inputName+" must have 'float32' dtype, but has '"+dx.dtype+"'"))}var x=node.inputs[inputName];if(!arraysEqual(dx.shape,x.shape)){throw new Error("Error in gradient for op "+node.kernelName+". The gradient of input "+("'"+inputName+"' has shape '"+dx.shape+"', which does not match ")+("the shape of the input '"+x.shape+"'"))}if(tensorAccumulatedGradientMap[x.id]==null){tensorAccumulatedGradientMap[x.id]=dx}else{var curGradient=tensorAccumulatedGradientMap[x.id];tensorAccumulatedGradientMap[x.id]=add(curGradient,dx);curGradient.dispose()}};for(var inputName in node.inputs){_loop_2(inputName)}};for(var i=filteredTape.length-1;i>=0;i--){_loop_1(i)}}var FORMAT_LIMIT_NUM_VALS=20;var FORMAT_NUM_FIRST_LAST_VALS=3;var FORMAT_NUM_SIG_DIGITS=7;function tensorToString(vals,shape,dtype,verbose){var strides=computeStrides(shape);var padPerCol=computeMaxSizePerColumn(vals,shape,dtype,strides);var rank=shape.length;var valsLines=subTensorToString(vals,shape,dtype,strides,padPerCol);var lines=["Tensor"];if(verbose){lines.push("  dtype: "+dtype);lines.push("  rank: "+rank);lines.push("  shape: ["+shape+"]");lines.push("  values:")}lines.push(valsLines.map(function(l){return"    "+l}).join("\n"));return lines.join("\n")}function computeMaxSizePerColumn(vals,shape,dtype,strides){var n=sizeFromShape(shape);var numCols=strides[strides.length-1];var padPerCol=new Array(numCols).fill(0);var rank=shape.length;var valuesOrTuples=dtype==="complex64"?createComplexTuples(vals):vals;if(rank>1){for(var row=0;row<n/numCols;row++){var offset=row*numCols;for(var j=0;j<numCols;j++){padPerCol[j]=Math.max(padPerCol[j],valToString(valuesOrTuples[offset+j],0,dtype).length)}}}return padPerCol}function valToString(val,pad,dtype){var valStr;if(Array.isArray(val)){valStr=parseFloat(val[0].toFixed(FORMAT_NUM_SIG_DIGITS))+" + "+(parseFloat(val[1].toFixed(FORMAT_NUM_SIG_DIGITS))+"j")}else if(isString(val)){valStr="'"+val+"'"}else if(dtype==="bool"){valStr=boolNumToString(val)}else{valStr=parseFloat(val.toFixed(FORMAT_NUM_SIG_DIGITS)).toString()}return rightPad(valStr,pad)}function boolNumToString(v){return v===0?"false":"true"}function subTensorToString(vals,shape,dtype,strides,padPerCol,isLast){if(isLast===void 0){isLast=true}var storagePerElement=dtype==="complex64"?2:1;var size=shape[0];var rank=shape.length;if(rank===0){if(dtype==="complex64"){var complexTuple=createComplexTuples(vals);return[valToString(complexTuple[0],0,dtype)]}if(dtype==="bool"){return[boolNumToString(vals[0])]}return[vals[0].toString()]}if(rank===1){if(size>FORMAT_LIMIT_NUM_VALS){var firstValsSize=FORMAT_NUM_FIRST_LAST_VALS*storagePerElement;var firstVals=Array.from(vals.slice(0,firstValsSize));var lastVals=Array.from(vals.slice((size-FORMAT_NUM_FIRST_LAST_VALS)*storagePerElement,size*storagePerElement));if(dtype==="complex64"){firstVals=createComplexTuples(firstVals);lastVals=createComplexTuples(lastVals)}return["["+firstVals.map(function(x,i){return valToString(x,padPerCol[i],dtype)}).join(", ")+", ..., "+lastVals.map(function(x,i){return valToString(x,padPerCol[size-FORMAT_NUM_FIRST_LAST_VALS+i],dtype)}).join(", ")+"]"]}var displayVals=dtype==="complex64"?createComplexTuples(vals):Array.from(vals);return["["+displayVals.map(function(x,i){return valToString(x,padPerCol[i],dtype)}).join(", ")+"]"]}var subshape=shape.slice(1);var substrides=strides.slice(1);var stride=strides[0]*storagePerElement;var lines=[];if(size>FORMAT_LIMIT_NUM_VALS){for(var i=0;i<FORMAT_NUM_FIRST_LAST_VALS;i++){var start=i*stride;var end=start+stride;lines.push.apply(lines,__spread(subTensorToString(vals.slice(start,end),subshape,dtype,substrides,padPerCol,false)))}lines.push("...");for(var i=size-FORMAT_NUM_FIRST_LAST_VALS;i<size;i++){var start=i*stride;var end=start+stride;lines.push.apply(lines,__spread(subTensorToString(vals.slice(start,end),subshape,dtype,substrides,padPerCol,i===size-1)))}}else{for(var i=0;i<size;i++){var start=i*stride;var end=start+stride;lines.push.apply(lines,__spread(subTensorToString(vals.slice(start,end),subshape,dtype,substrides,padPerCol,i===size-1)))}}var sep=rank===2?",":"";lines[0]="["+lines[0]+sep;for(var i=1;i<lines.length-1;i++){lines[i]=" "+lines[i]+sep}var newLineSep=",\n";for(var i=2;i<rank;i++){newLineSep+="\n"}lines[lines.length-1]=" "+lines[lines.length-1]+"]"+(isLast?"":newLineSep);return lines}function createComplexTuples(vals){var complexTuples=[];for(var i=0;i<vals.length;i+=2){complexTuples.push([vals[i],vals[i+1]])}return complexTuples}var TensorBuffer=function(){function TensorBuffer(shape,dtype,values){var _this=this;this.dtype=dtype;this.shape=shape.slice();this.size=sizeFromShape(shape);if(values!=null){var n_1=values.length;assert(n_1===this.size,function(){return"Length of values '"+n_1+"' does not match the size "+("inferred by the shape '"+_this.size+"'.")})}if(dtype==="complex64"){throw new Error("complex64 dtype TensorBuffers are not supported. Please create "+"a TensorBuffer for the real and imaginary parts separately and "+"call tf.complex(real, imag).")}this.values=values||getArrayFromDType(dtype,this.size);this.strides=computeStrides(shape)}TensorBuffer.prototype.set=function(value){var _this=this;var locs=[];for(var _i=1;_i<arguments.length;_i++){locs[_i-1]=arguments[_i]}if(locs.length===0){locs=[0]}assert(locs.length===this.rank,function(){return"The number of provided coordinates ("+locs.length+") must "+("match the rank ("+_this.rank+")")});var index=this.locToIndex(locs);this.values[index]=value};TensorBuffer.prototype.get=function(){var e_1,_b;var locs=[];for(var _i=0;_i<arguments.length;_i++){locs[_i]=arguments[_i]}if(locs.length===0){locs=[0]}var i=0;try{for(var locs_1=__values(locs),locs_1_1=locs_1.next();!locs_1_1.done;locs_1_1=locs_1.next()){var loc=locs_1_1.value;if(loc<0||loc>=this.shape[i]){var msg="Requested out of range element at "+locs+". "+("  Buffer shape="+this.shape);throw new Error(msg)}i++}}catch(e_1_1){e_1={error:e_1_1}}finally{try{if(locs_1_1&&!locs_1_1.done&&(_b=locs_1.return))_b.call(locs_1)}finally{if(e_1)throw e_1.error}}var index=locs[locs.length-1];for(var i_1=0;i_1<locs.length-1;++i_1){index+=this.strides[i_1]*locs[i_1]}return this.values[index]};TensorBuffer.prototype.locToIndex=function(locs){if(this.rank===0){return 0}else if(this.rank===1){return locs[0]}var index=locs[locs.length-1];for(var i=0;i<locs.length-1;++i){index+=this.strides[i]*locs[i]}return index};TensorBuffer.prototype.indexToLoc=function(index){if(this.rank===0){return[]}else if(this.rank===1){return[index]}var locs=new Array(this.shape.length);for(var i=0;i<locs.length-1;++i){locs[i]=Math.floor(index/this.strides[i]);index-=locs[i]*this.strides[i]}locs[locs.length-1]=index;return locs};Object.defineProperty(TensorBuffer.prototype,"rank",{get:function(){return this.shape.length},enumerable:true,configurable:true});TensorBuffer.prototype.toTensor=function(){return trackerFn().makeTensor(this.values,this.shape,this.dtype)};return TensorBuffer}();var trackerFn=null;var opHandler$1=null;function setTensorTracker(fn){trackerFn=fn}function setOpHandler(handler){opHandler$1=handler}var Tensor=function(){function Tensor(shape,dtype,dataId,id){this.kept=false;this.isDisposedInternal=false;this.shape=shape.slice();this.dtype=dtype||"float32";this.size=sizeFromShape(shape);this.strides=computeStrides(shape);this.dataId=dataId;this.id=id;this.rankType=this.rank<5?this.rank.toString():"higher"}Object.defineProperty(Tensor.prototype,"rank",{get:function(){return this.shape.length},enumerable:true,configurable:true});Tensor.prototype.buffer=function(){return __awaiter(this,void 0,void 0,function(){var vals;return __generator(this,function(_b){switch(_b.label){case 0:return[4,this.data()];case 1:vals=_b.sent();return[2,opHandler$1.buffer(this.shape,this.dtype,vals)]}})})};Tensor.prototype.bufferSync=function(){return opHandler$1.buffer(this.shape,this.dtype,this.dataSync())};Tensor.prototype.array=function(){return __awaiter(this,void 0,void 0,function(){var vals;return __generator(this,function(_b){switch(_b.label){case 0:return[4,this.data()];case 1:vals=_b.sent();return[2,toNestedArray(this.shape,vals,this.dtype==="complex64")]}})})};Tensor.prototype.arraySync=function(){return toNestedArray(this.shape,this.dataSync(),this.dtype==="complex64")};Tensor.prototype.data=function(){return __awaiter(this,void 0,void 0,function(){var data,bytes;return __generator(this,function(_b){switch(_b.label){case 0:this.throwIfDisposed();data=trackerFn().read(this.dataId);if(!(this.dtype==="string"))return[3,2];return[4,data];case 1:bytes=_b.sent();try{return[2,bytes.map(function(b){return decodeString(b)})]}catch(_a){throw new Error("Failed to decode the string bytes into utf-8. "+"To get the original bytes, call tensor.bytes().")}_b.label=2;case 2:return[2,data]}})})};Tensor.prototype.dataSync=function(){this.throwIfDisposed();var data=trackerFn().readSync(this.dataId);if(this.dtype==="string"){try{return data.map(function(b){return decodeString(b)})}catch(_a){throw new Error("Failed to decode the string bytes into utf-8. "+"To get the original bytes, call tensor.bytes().")}}return data};Tensor.prototype.bytes=function(){return __awaiter(this,void 0,void 0,function(){var data;return __generator(this,function(_b){switch(_b.label){case 0:this.throwIfDisposed();return[4,trackerFn().read(this.dataId)];case 1:data=_b.sent();if(this.dtype==="string"){return[2,data]}else{return[2,new Uint8Array(data.buffer)]}}})})};Tensor.prototype.dispose=function(){if(this.isDisposed){return}trackerFn().disposeTensor(this);this.isDisposedInternal=true};Object.defineProperty(Tensor.prototype,"isDisposed",{get:function(){return this.isDisposedInternal},enumerable:true,configurable:true});Tensor.prototype.throwIfDisposed=function(){if(this.isDisposed){throw new Error("Tensor is disposed.")}};Tensor.prototype.print=function(verbose){if(verbose===void 0){verbose=false}return opHandler$1.print(this,verbose)};Tensor.prototype.clone=function(){this.throwIfDisposed();return opHandler$1.clone(this)};Tensor.prototype.toString=function(verbose){if(verbose===void 0){verbose=false}var vals=this.dataSync();return tensorToString(vals,this.shape,this.dtype,verbose)};Tensor.prototype.cast=function(dtype){this.throwIfDisposed();return opHandler$1.cast(this,dtype)};Tensor.prototype.variable=function(trainable,name,dtype){if(trainable===void 0){trainable=true}this.throwIfDisposed();return trackerFn().makeVariable(this,trainable,name,dtype)};return Tensor}();Object.defineProperty(Tensor,Symbol.hasInstance,{value:function(instance){return!!instance&&instance.data!=null&&instance.dataSync!=null&&instance.throwIfDisposed!=null}});function getGlobalTensorClass(){return getGlobal("Tensor",function(){return Tensor})}getGlobalTensorClass();var Variable=function(_super){__extends(Variable,_super);function Variable(initialValue,trainable,name,tensorId){var _this=_super.call(this,initialValue.shape,initialValue.dtype,initialValue.dataId,tensorId)||this;_this.trainable=trainable;_this.name=name;return _this}Variable.prototype.assign=function(newValue){if(newValue.dtype!==this.dtype){throw new Error("dtype of the new value ("+newValue.dtype+") and "+("previous value ("+this.dtype+") must match"))}if(!arraysEqual(newValue.shape,this.shape)){throw new Error("shape of the new value ("+newValue.shape+") and "+("previous value ("+this.shape+") must match"))}trackerFn().disposeTensor(this);this.dataId=newValue.dataId;trackerFn().incRef(this,null)};Variable.prototype.dispose=function(){trackerFn().disposeVariable(this);this.isDisposedInternal=true};return Variable}(Tensor);Object.defineProperty(Variable,Symbol.hasInstance,{value:function(instance){return instance instanceof Tensor&&instance.assign!=null&&instance.assign instanceof Function}});exports.Rank=void 0;(function(Rank){Rank["R0"]="R0";Rank["R1"]="R1";Rank["R2"]="R2";Rank["R3"]="R3";Rank["R4"]="R4";Rank["R5"]="R5";Rank["R6"]="R6"})(exports.Rank||(exports.Rank={}));var UpcastInt32AndMap;(function(UpcastInt32AndMap){UpcastInt32AndMap["float32"]="float32";UpcastInt32AndMap["int32"]="int32";UpcastInt32AndMap["bool"]="int32";UpcastInt32AndMap["complex64"]="complex64"})(UpcastInt32AndMap||(UpcastInt32AndMap={}));var UpcastBoolAndMap;(function(UpcastBoolAndMap){UpcastBoolAndMap["float32"]="float32";UpcastBoolAndMap["int32"]="int32";UpcastBoolAndMap["bool"]="bool";UpcastBoolAndMap["complex64"]="complex64"})(UpcastBoolAndMap||(UpcastBoolAndMap={}));var UpcastFloat32AndMap;(function(UpcastFloat32AndMap){UpcastFloat32AndMap["float32"]="float32";UpcastFloat32AndMap["int32"]="float32";UpcastFloat32AndMap["bool"]="float32";UpcastFloat32AndMap["complex64"]="complex64"})(UpcastFloat32AndMap||(UpcastFloat32AndMap={}));var UpcastComplex64AndMap;(function(UpcastComplex64AndMap){UpcastComplex64AndMap["float32"]="complex64";UpcastComplex64AndMap["int32"]="complex64";UpcastComplex64AndMap["bool"]="complex64";UpcastComplex64AndMap["complex64"]="complex64"})(UpcastComplex64AndMap||(UpcastComplex64AndMap={}));var upcastTypeMap={float32:UpcastFloat32AndMap,int32:UpcastInt32AndMap,bool:UpcastBoolAndMap,complex64:UpcastComplex64AndMap};function upcastType(typeA,typeB){if(typeA==="string"||typeB==="string"){if(typeA==="string"&&typeB==="string"){return"string"}throw new Error("Can not upcast "+typeA+" with "+typeB)}return upcastTypeMap[typeA][typeB]}function sumOutType(type){return upcastType(type,"int32")}function makeTypesMatch(a,b){if(a.dtype===b.dtype){return[a,b]}var dtype=upcastType(a.dtype,b.dtype);return[a.cast(dtype),b.cast(dtype)]}function assertTypesMatch(a,b){assert(a.dtype===b.dtype,function(){return"The dtypes of the first("+a.dtype+") and"+(" second("+b.dtype+") input must match")})}function isTensorInList(tensor,tensorList){return tensorList.some(function(x){return x.id===tensor.id})}function getTensorsInContainer(result){var list=[];var seen=new Set;walkTensorContainer(result,list,seen);return list}function walkTensorContainer(container,list,seen){if(container==null){return}if(container instanceof Tensor){list.push(container);return}if(!isIterable(container)){return}var iterable=container;for(var k in iterable){var val=iterable[k];if(!seen.has(val)){seen.add(val);walkTensorContainer(val,list,seen)}}}function isIterable(obj){return Array.isArray(obj)||typeof obj==="object"}var tensor_util={__proto__:null,makeTypesMatch:makeTypesMatch,assertTypesMatch:assertTypesMatch,isTensorInList:isTensorInList,getTensorsInContainer:getTensorsInContainer};function isRegisteredKernelInvocation(kernelInvocation){return kernelInvocation.kernelName!=null}var EngineState=function(){function EngineState(){this.registeredVariables={};this.nextTapeNodeId=0;this.numBytes=0;this.numTensors=0;this.numStringTensors=0;this.numDataBuffers=0;this.gradientDepth=0;this.kernelDepth=0;this.scopeStack=[];this.numDataMovesStack=[];this.nextScopeId=0;this.tensorInfo=new WeakMap;this.profiling=false;this.activeProfile={newBytes:0,newTensors:0,peakBytes:0,kernels:[],result:null,get kernelNames(){return Array.from(new Set(this.kernels.map(function(k){return k.name})))}}}EngineState.prototype.dispose=function(){for(var variableName in this.registeredVariables){this.registeredVariables[variableName].dispose()}};return EngineState}();var Engine=function(){function Engine(ENV){this.ENV=ENV;this.registry={};this.registryFactory={};this.pendingBackendInitId=0;this.state=new EngineState}Engine.prototype.ready=function(){return __awaiter(this,void 0,void 0,function(){var sortedBackends,i,backendName,success;return __generator(this,function(_a){switch(_a.label){case 0:if(this.pendingBackendInit!=null){return[2,this.pendingBackendInit.then(function(){})]}if(this.backendInstance!=null){return[2]}sortedBackends=this.getSortedBackends();i=0;_a.label=1;case 1:if(!(i<sortedBackends.length))return[3,5];backendName=sortedBackends[i];return[4,this.initializeBackend(backendName).success];case 2:success=_a.sent();if(!success)return[3,4];return[4,this.setBackend(backendName)];case 3:_a.sent();return[2];case 4:i++;return[3,1];case 5:throw new Error("Could not initialize any backends, all backend initializations "+"failed.")}})})};Object.defineProperty(Engine.prototype,"backend",{get:function(){if(this.pendingBackendInit!=null){throw new Error("Backend '"+this.backendName+"' has not yet been initialized. Make "+"sure to await tf.ready() or await tf.setBackend() before calling "+"other methods")}if(this.backendInstance==null){var _a=this.initializeBackendsAndReturnBest(),name=_a.name,asyncInit=_a.asyncInit;if(asyncInit){throw new Error("The highest priority backend '"+name+"' has not yet been "+"initialized. Make sure to await tf.ready() or "+"await tf.setBackend() before calling other methods")}this.setBackend(name)}return this.backendInstance},enumerable:true,configurable:true});Engine.prototype.backendNames=function(){return Object.keys(this.registryFactory)};Engine.prototype.findBackend=function(backendName){if(!(backendName in this.registry)){if(backendName in this.registryFactory){var asyncInit=this.initializeBackend(backendName).asyncInit;if(asyncInit){return null}}else{return null}}return this.registry[backendName]};Engine.prototype.findBackendFactory=function(backendName){if(!(backendName in this.registryFactory)){return null}return this.registryFactory[backendName].factory};Engine.prototype.registerBackend=function(backendName,factory,priority){if(priority===void 0){priority=1}if(backendName in this.registryFactory){warn(backendName+" backend was already registered. "+"Reusing existing backend factory.");return false}this.registryFactory[backendName]={factory:factory,priority:priority};return true};Engine.prototype.setBackend=function(backendName){return __awaiter(this,void 0,void 0,function(){var _a,success,asyncInit,result,_b;return __generator(this,function(_c){switch(_c.label){case 0:if(this.registryFactory[backendName]==null){throw new Error("Backend name '"+backendName+"' not found in registry")}this.backendName=backendName;if(!(this.registry[backendName]==null))return[3,4];this.backendInstance=null;_a=this.initializeBackend(backendName),success=_a.success,asyncInit=_a.asyncInit;if(!asyncInit)return[3,2];return[4,success];case 1:_b=_c.sent();return[3,3];case 2:_b=success;_c.label=3;case 3:result=_b;if(!result){return[2,false]}_c.label=4;case 4:this.backendInstance=this.registry[backendName];this.setupRegisteredKernels();this.profiler=new Profiler(this.backendInstance);return[2,true]}})})};Engine.prototype.setupRegisteredKernels=function(){var _this=this;var kernels=getKernelsForBackend(this.backendName);kernels.forEach(function(kernel){if(kernel.setupFunc!=null){kernel.setupFunc(_this.backendInstance)}})};Engine.prototype.disposeRegisteredKernels=function(backendName){var _this=this;var kernels=getKernelsForBackend(backendName);kernels.forEach(function(kernel){if(kernel.disposeFunc!=null){kernel.disposeFunc(_this.registry[backendName])}})};Engine.prototype.initializeBackend=function(backendName){var _this=this;var registryFactoryEntry=this.registryFactory[backendName];if(registryFactoryEntry==null){throw new Error("Cannot initialize backend "+backendName+", no registration found.")}try{var backend=registryFactoryEntry.factory();if(backend&&!(backend instanceof KernelBackend)&&typeof backend.then==="function"){var promiseId_1=++this.pendingBackendInitId;var success=backend.then(function(backendInstance){if(promiseId_1<_this.pendingBackendInitId){return false}_this.registry[backendName]=backendInstance;_this.pendingBackendInit=null;return true}).catch(function(err){if(promiseId_1<_this.pendingBackendInitId){return false}_this.pendingBackendInit=null;warn("Initialization of backend "+backendName+" failed");warn(err.stack||err.message);return false});this.pendingBackendInit=success;return{success:success,asyncInit:true}}else{this.registry[backendName]=backend;return{success:true,asyncInit:false}}}catch(err){warn("Initialization of backend "+backendName+" failed");warn(err.stack||err.message);return{success:false,asyncInit:false}}};Engine.prototype.removeBackend=function(backendName){if(!(backendName in this.registryFactory)){throw new Error(backendName+" backend not found in registry")}if(this.backendName===backendName&&this.pendingBackendInit!=null){this.pendingBackendInitId++}if(backendName in this.registry){this.disposeRegisteredKernels(backendName);this.registry[backendName].dispose();delete this.registry[backendName]}delete this.registryFactory[backendName];if(this.backendName===backendName){this.pendingBackendInit=null;this.backendName=null;this.backendInstance=null}};Engine.prototype.getSortedBackends=function(){var _this=this;if(Object.keys(this.registryFactory).length===0){throw new Error("No backend found in registry.")}return Object.keys(this.registryFactory).sort(function(a,b){return _this.registryFactory[b].priority-_this.registryFactory[a].priority})};Engine.prototype.initializeBackendsAndReturnBest=function(){var sortedBackends=this.getSortedBackends();for(var i=0;i<sortedBackends.length;i++){var backendName=sortedBackends[i];var _a=this.initializeBackend(backendName),success=_a.success,asyncInit=_a.asyncInit;if(asyncInit||success){return{name:backendName,asyncInit:asyncInit}}}throw new Error("Could not initialize any backends, all backend initializations "+"failed.")};Engine.prototype.moveData=function(backend,dataId){var info=this.state.tensorInfo.get(dataId);var srcBackend=info.backend;var values=this.readSync(dataId);var refCount=srcBackend.refCount(dataId);srcBackend.disposeData(dataId,true);info.backend=backend;backend.move(dataId,values,info.shape,info.dtype,refCount);if(this.shouldCheckForMemLeaks()){this.state.numDataMovesStack[this.state.numDataMovesStack.length-1]++}};Engine.prototype.tidy=function(nameOrFn,fn){var _this=this;var name=null;if(fn==null){if(typeof nameOrFn!=="function"){throw new Error("Please provide a function to tidy()")}fn=nameOrFn}else{if(typeof nameOrFn!=="string"&&!(nameOrFn instanceof String)){throw new Error("When calling with two arguments, the first argument "+"to tidy() must be a string")}if(typeof fn!=="function"){throw new Error("When calling with two arguments, the 2nd argument "+"to tidy() must be a function")}name=nameOrFn}var result;return this.scopedRun(function(){return _this.startScope(name)},function(){return _this.endScope(result)},function(){result=fn();if(result instanceof Promise){console.error("Cannot return a Promise inside of tidy.")}return result})};Engine.prototype.scopedRun=function(start,end,f){start();try{var res=f();end();return res}catch(ex){end();throw ex}};Engine.prototype.nextTensorId=function(){return Engine.nextTensorId++};Engine.prototype.nextVariableId=function(){return Engine.nextVariableId++};Engine.prototype.clone=function(x){var y=ENGINE.runKernel(Identity,{x:x});var inputs={x:x};var grad=function(dy){return{x:function(){var dtype="float32";var gradInputs={x:dy};var attrs={dtype:dtype};return ENGINE.runKernel(Cast,gradInputs,attrs)}}};var saved=[];this.addTapeNode(this.state.activeScope.name,inputs,[y],grad,saved,{});return y};Engine.prototype.runKernel=function(kernelName,inputs,attrs){if(this.backendName==null){this.backend}var hasKernel=getKernel(kernelName,this.backendName)!=null;if(!hasKernel){throw new Error("Kernel '"+kernelName+"' not registered for backend '"+this.backendName+"'")}return this.runKernelFunc({kernelName:kernelName,inputs:inputs,attrs:attrs})};Engine.prototype.shouldCheckForMemLeaks=function(){return this.ENV.getBool("IS_TEST")};Engine.prototype.checkKernelForMemLeak=function(kernelName,numDataIdsBefore,outInfos){var numDataIdsAfter=this.backend.numDataIds();var numOutputDataIds=0;outInfos.forEach(function(info){numOutputDataIds+=info.dtype==="complex64"?3:1});var numMoves=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1];var dataIdsLeaked=numDataIdsAfter-numDataIdsBefore-numOutputDataIds-numMoves;if(dataIdsLeaked>0){throw new Error("Backend '"+this.backendName+"' has an internal memory leak "+("("+dataIdsLeaked+" data ids) after running '"+kernelName+"'"))}};Engine.prototype.runKernelFunc=function(kernelParams){var _this=this;var outputs;var saved=[];var isTapeOn=this.isTapeOn();var startingBytecount=this.state.numBytes;var startingNumTensors=this.state.numTensors;if(this.shouldCheckForMemLeaks()){this.state.numDataMovesStack.push(0)}var kernelFunc;if(this.backendName==null){this.backend}var out;var kernelOrScopeName=isRegisteredKernelInvocation(kernelParams)?kernelParams.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(isRegisteredKernelInvocation(kernelParams)){var kernelName_1=kernelParams.kernelName,inputs_1=kernelParams.inputs,attrs_1=kernelParams.attrs;if(this.backendName==null){this.backend}var kernel_1=getKernel(kernelName_1,this.backendName);assert(kernel_1!=null,function(){return"Cannot find registered kernel '"+kernelName_1+"' for backend '"+_this.backendName+"'"});kernelFunc=function(){var numDataIdsBefore=_this.backend.numDataIds();out=kernel_1.kernelFunc({inputs:inputs_1,attrs:attrs_1,backend:_this.backend});var outInfos=Array.isArray(out)?out:[out];if(_this.shouldCheckForMemLeaks()){_this.checkKernelForMemLeak(kernelName_1,numDataIdsBefore,outInfos)}var outTensors=outInfos.map(function(outInfo){if(outInfo.rank!=null){return outInfo}var dataId=outInfo.dataId,shape=outInfo.shape,dtype=outInfo.dtype;return _this.makeTensorFromDataId(dataId,shape,dtype)});if(isTapeOn){var tensorsToSave=_this.getTensorsForGradient(kernelName_1,inputs_1,outTensors);saved=_this.saveTensorsForBackwardMode(tensorsToSave)}return outTensors}}else{var forwardFunc_1=kernelParams.forwardFunc;var saveFunc_1=function(tensors){if(!isTapeOn){return}saved=tensors.map(function(tensor){return _this.keep(_this.clone(tensor))})};kernelFunc=function(){var numDataIdsBefore=_this.backend.numDataIds();out=_this.tidy(function(){return forwardFunc_1(_this.backend,saveFunc_1)});var outs=Array.isArray(out)?out:[out];if(_this.shouldCheckForMemLeaks()){_this.checkKernelForMemLeak(kernelOrScopeName,numDataIdsBefore,outs)}return outs}}var inputs=kernelParams.inputs,attrs=kernelParams.attrs;var backwardsFunc=isRegisteredKernelInvocation(kernelParams)?null:kernelParams.backwardsFunc;var kernelProfile;this.scopedRun(function(){return _this.state.kernelDepth++},function(){return _this.state.kernelDepth--},function(){if(!_this.ENV.getBool("DEBUG")&&!_this.state.profiling){outputs=kernelFunc()}else{kernelProfile=_this.profiler.profileKernel(kernelOrScopeName,inputs,function(){return kernelFunc()});if(_this.ENV.getBool("DEBUG")){_this.profiler.logKernelProfile(kernelProfile)}outputs=kernelProfile.outputs}});if(isTapeOn){this.addTapeNode(kernelOrScopeName,inputs,outputs,backwardsFunc,saved,attrs)}if(this.state.profiling){this.state.activeProfile.kernels.push({name:kernelOrScopeName,bytesAdded:this.state.numBytes-startingBytecount,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-startingNumTensors,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(inputs).map(function(key){return inputs[key]!=null?inputs[key].shape:null}),outputShapes:outputs.map(function(item){return item.shape}),kernelTimeMs:kernelProfile.timeMs,extraInfo:kernelProfile.extraInfo})}return Array.isArray(out)?outputs:outputs[0]};Engine.prototype.saveTensorsForBackwardMode=function(tensors){var _this=this;var saved=tensors.map(function(tensor){return _this.keep(_this.clone(tensor))});return saved};Engine.prototype.getTensorsForGradient=function(kernelName,inputs,outputs){var gradConfig=getGradient(kernelName);if(gradConfig!=null){var inputsToSave=gradConfig.inputsToSave||[];var outputsToSave_1=gradConfig.outputsToSave||[];var inputTensorsToSave=void 0;if(gradConfig.saveAllInputs){assert(Array.isArray(inputs),function(){return"saveAllInputs is true, expected inputs to be an array."});inputTensorsToSave=Object.keys(inputs).map(function(key){return inputs[key]})}else{inputTensorsToSave=inputsToSave.map(function(inputName){return inputs[inputName]})}var outputTensorsToSave=outputs.filter(function(_,i){return outputsToSave_1[i]});return inputTensorsToSave.concat(outputTensorsToSave)}return[]};Engine.prototype.makeTensor=function(values,shape,dtype,backend){if(values==null){throw new Error("Values passed to engine.makeTensor() are null")}dtype=dtype||"float32";backend=backend||this.backend;var backendVals=values;if(dtype==="string"&&isString(values[0])){backendVals=values.map(function(d){return encodeString(d)})}var dataId=backend.write(backendVals,shape,dtype);var t=new Tensor(shape,dtype,dataId,this.nextTensorId());this.trackTensor(t,backend);if(dtype==="string"){var info=this.state.tensorInfo.get(dataId);var newBytes=bytesFromStringArray(backendVals);this.state.numBytes+=newBytes-info.bytes;info.bytes=newBytes}return t};Engine.prototype.makeTensorFromDataId=function(dataId,shape,dtype,backend){dtype=dtype||"float32";var t=new Tensor(shape,dtype,dataId,this.nextTensorId());this.trackTensor(t,backend);return t};Engine.prototype.makeVariable=function(initialValue,trainable,name,dtype){if(trainable===void 0){trainable=true}name=name||this.nextVariableId().toString();if(dtype!=null&&dtype!==initialValue.dtype){initialValue=initialValue.cast(dtype)}var v=new Variable(initialValue,trainable,name,this.nextTensorId());if(this.state.registeredVariables[v.name]!=null){throw new Error("Variable with name "+v.name+" was already registered")}this.state.registeredVariables[v.name]=v;this.incRef(v,this.backend);return v};Engine.prototype.trackTensor=function(a,backend){this.state.numTensors++;if(a.dtype==="string"){this.state.numStringTensors++}var bytes=0;if(a.dtype!=="complex64"&&a.dtype!=="string"){bytes=a.size*bytesPerElement(a.dtype)}this.state.numBytes+=bytes;if(!this.state.tensorInfo.has(a.dataId)){this.state.numDataBuffers++;this.state.tensorInfo.set(a.dataId,{backend:backend||this.backend,dtype:a.dtype,shape:a.shape,bytes:bytes})}if(!(a instanceof Variable)){this.track(a)}};Engine.prototype.incRef=function(a,backend){this.trackTensor(a,backend);this.backend.incRef(a.dataId)};Engine.prototype.removeDataId=function(dataId,backend){if(this.state.tensorInfo.has(dataId)&&this.state.tensorInfo.get(dataId).backend===backend){this.state.tensorInfo.delete(dataId);this.state.numDataBuffers--}};Engine.prototype.disposeTensor=function(a){if(!this.state.tensorInfo.has(a.dataId)){return}var info=this.state.tensorInfo.get(a.dataId);this.state.numTensors--;if(a.dtype==="string"){this.state.numStringTensors--;this.state.numBytes-=info.bytes}if(a.dtype!=="complex64"&&a.dtype!=="string"){var bytes=a.size*bytesPerElement(a.dtype);this.state.numBytes-=bytes}if(info.backend.disposeData(a.dataId)){this.removeDataId(a.dataId,info.backend)}};Engine.prototype.disposeVariables=function(){for(var varName in this.state.registeredVariables){var v=this.state.registeredVariables[varName];this.disposeVariable(v)}};Engine.prototype.disposeVariable=function(v){this.disposeTensor(v);if(this.state.registeredVariables[v.name]!=null){delete this.state.registeredVariables[v.name]}};Engine.prototype.memory=function(){var info=this.backend.memory();info.numTensors=this.state.numTensors;info.numDataBuffers=this.state.numDataBuffers;info.numBytes=this.state.numBytes;if(this.state.numStringTensors>0){info.unreliable=true;if(info.reasons==null){info.reasons=[]}info.reasons.push("Memory usage by string tensors is approximate "+"(2 bytes per character)")}return info};Engine.prototype.profile=function(query){return __awaiter(this,void 0,void 0,function(){var startBytes,startNumTensors,_a,_b,_c,kernel,_d,_e,e_1_1;var e_1,_f;return __generator(this,function(_g){switch(_g.label){case 0:this.state.profiling=true;startBytes=this.state.numBytes;startNumTensors=this.state.numTensors;this.state.activeProfile.kernels=[];_a=this.state.activeProfile;return[4,query()];case 1:_a.result=_g.sent();this.state.profiling=false;this.state.activeProfile.peakBytes=Math.max.apply(Math,__spread(this.state.activeProfile.kernels.map(function(d){return d.totalBytesSnapshot})));this.state.activeProfile.newBytes=this.state.numBytes-startBytes;this.state.activeProfile.newTensors=this.state.numTensors-startNumTensors;_g.label=2;case 2:_g.trys.push([2,8,9,10]);_b=__values(this.state.activeProfile.kernels),_c=_b.next();_g.label=3;case 3:if(!!_c.done)return[3,7];kernel=_c.value;_d=kernel;return[4,kernel.kernelTimeMs];case 4:_d.kernelTimeMs=_g.sent();_e=kernel;return[4,kernel.extraInfo];case 5:_e.extraInfo=_g.sent();_g.label=6;case 6:_c=_b.next();return[3,3];case 7:return[3,10];case 8:e_1_1=_g.sent();e_1={error:e_1_1};return[3,10];case 9:try{if(_c&&!_c.done&&(_f=_b.return))_f.call(_b)}finally{if(e_1)throw e_1.error}return[7];case 10:return[2,this.state.activeProfile]}})})};Engine.prototype.isTapeOn=function(){return this.state.gradientDepth>0&&this.state.kernelDepth===0};Engine.prototype.addTapeNode=function(kernelName,inputs,outputs,gradientsFunc,saved,attrs){var _this=this;var tapeNode={id:this.state.nextTapeNodeId++,kernelName:kernelName,inputs:inputs,outputs:outputs,saved:saved};var gradConfig=getGradient(kernelName);if(gradConfig!=null){gradientsFunc=gradConfig.gradFunc}if(gradientsFunc!=null){tapeNode.gradient=function(dys){dys=dys.map(function(dy,i){if(dy==null){var output=outputs[i];var vals=makeZerosTypedArray(output.size,output.dtype);return _this.makeTensor(vals,output.shape,output.dtype)}return dy});return gradientsFunc(dys.length>1?dys:dys[0],saved,attrs)}}this.state.activeTape.push(tapeNode)};Engine.prototype.keep=function(result){result.kept=true;return result};Engine.prototype.startTape=function(){if(this.state.gradientDepth===0){this.state.activeTape=[]}this.state.gradientDepth++};Engine.prototype.endTape=function(){this.state.gradientDepth--};Engine.prototype.startScope=function(name){var scopeInfo={track:[],name:"unnamed scope",id:this.state.nextScopeId++};if(name){scopeInfo.name=name}this.state.scopeStack.push(scopeInfo);this.state.activeScope=scopeInfo};Engine.prototype.endScope=function(result){var _this=this;var tensorsToTrackInParent=getTensorsInContainer(result);var tensorsToTrackInParentSet=new Set(tensorsToTrackInParent.map(function(t){return t.id}));for(var i=0;i<this.state.activeScope.track.length;i++){var tensor=this.state.activeScope.track[i];if(!tensor.kept&&!tensorsToTrackInParentSet.has(tensor.id)){tensor.dispose()}}var oldScope=this.state.scopeStack.pop();this.state.activeScope=this.state.scopeStack.length===0?null:this.state.scopeStack[this.state.scopeStack.length-1];tensorsToTrackInParent.forEach(function(tensor){if(!tensor.kept&&tensor.scopeId===oldScope.id){_this.track(tensor)}})};Engine.prototype.gradients=function(f,xs,dy,allowNoGradients){var _this=this;if(allowNoGradients===void 0){allowNoGradients=false}assert(xs.length>0,function(){return"gradients() received an empty list of xs."});if(dy!=null&&dy.dtype!=="float32"){throw new Error("dy must have 'float32' dtype, but has '"+dy.dtype+"'")}var y=this.scopedRun(function(){return _this.startTape()},function(){return _this.endTape()},function(){return _this.tidy("forward",f)});assert(y instanceof Tensor,function(){return"The result y returned by f() must be a tensor."});var filteredTape=getFilteredNodesXToY(this.state.activeTape,xs,y);if(!allowNoGradients&&filteredTape.length===0&&xs.length>0){throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure "+"that the f you passed encloses all operations that lead from x "+"to y.")}return this.tidy("backward",function(){var accumulatedGradientMap={};accumulatedGradientMap[y.id]=dy==null?ones$1(y.shape):dy;backpropagateGradients(accumulatedGradientMap,filteredTape,function(f){return _this.tidy(f)},add$1);var grads=xs.map(function(x){return accumulatedGradientMap[x.id]});if(_this.state.gradientDepth===0){_this.state.activeTape.forEach(function(node){var e_2,_a;try{for(var _b=__values(node.saved),_c=_b.next();!_c.done;_c=_b.next()){var tensor=_c.value;tensor.dispose()}}catch(e_2_1){e_2={error:e_2_1}}finally{try{if(_c&&!_c.done&&(_a=_b.return))_a.call(_b)}finally{if(e_2)throw e_2.error}}});_this.state.activeTape=null}return{value:y,grads:grads}})};Engine.prototype.customGrad=function(f){var _this=this;assert(isFunction(f),function(){return"The f passed in customGrad(f) must be a function."});return function(){var inputs=[];for(var _i=0;_i<arguments.length;_i++){inputs[_i]=arguments[_i]}assert(inputs.every(function(t){return t instanceof Tensor}),function(){return"The args passed in customGrad(f)(x1, x2,...) must all be "+"tensors"});var res;var inputMap={};inputs.forEach(function(input,i){inputMap[i]=input});var forwardFunc=function(_,save){res=f.apply(void 0,__spread(inputs,[save]));assert(res.value instanceof Tensor,function(){return"The function f passed in customGrad(f) must return an "+"object where `obj.value` is a tensor"});assert(isFunction(res.gradFunc),function(){return"The function f passed in customGrad(f) must return an "+"object where `obj.gradFunc` is a function."});return res.value};var backwardsFunc=function(dy,saved){var gradRes=res.gradFunc(dy,saved);var grads=Array.isArray(gradRes)?gradRes:[gradRes];assert(grads.length===inputs.length,function(){return"The function f passed in customGrad(f) must return an "+"object where `obj.gradFunc` is a function that returns "+"the same number of tensors as inputs passed to f(...)."});assert(grads.every(function(t){return t instanceof Tensor}),function(){return"The function f passed in customGrad(f) must return an "+"object where `obj.gradFunc` is a function that returns "+"a list of only tensors."});var gradMap={};grads.forEach(function(grad,i){gradMap[i]=function(){return grad}});return gradMap};return _this.runKernelFunc({forwardFunc:forwardFunc,backwardsFunc:backwardsFunc,inputs:inputMap})}};Engine.prototype.readSync=function(dataId){var info=this.state.tensorInfo.get(dataId);return info.backend.readSync(dataId)};Engine.prototype.read=function(dataId){var info=this.state.tensorInfo.get(dataId);return info.backend.read(dataId)};Engine.prototype.time=function(query){return __awaiter(this,void 0,void 0,function(){var start,timingInfo;return __generator(this,function(_a){switch(_a.label){case 0:start=now();return[4,this.backend.time(query)];case 1:timingInfo=_a.sent();timingInfo.wallMs=now()-start;return[2,timingInfo]}})})};Engine.prototype.track=function(result){if(this.state.activeScope!=null){result.scopeId=this.state.activeScope.id;this.state.activeScope.track.push(result)}return result};Object.defineProperty(Engine.prototype,"registeredVariables",{get:function(){return this.state.registeredVariables},enumerable:true,configurable:true});Engine.prototype.reset=function(){this.pendingBackendInitId++;this.state.dispose();this.ENV.reset();this.state=new EngineState;for(var backendName in this.registry){this.disposeRegisteredKernels(backendName);this.registry[backendName].dispose();delete this.registry[backendName]}this.backendName=null;this.backendInstance=null;this.pendingBackendInit=null};return Engine}();Engine.nextTensorId=0;Engine.nextVariableId=0;function ones$1(shape){var values=makeOnesTypedArray(sizeFromShape(shape),"float32");return ENGINE.makeTensor(values,shape,"float32")}function getOrMakeEngine(){var ns=getGlobalNamespace();if(ns._tfengine==null){var environment=new Environment(ns);ns._tfengine=new Engine(environment)}setEnvironmentGlobal(ns._tfengine.ENV);setTensorTracker(function(){return ns._tfengine});return ns._tfengine}var ENGINE=getOrMakeEngine();function add$1(a,b){var inputs={a:a,b:b};return ENGINE.runKernel(Add,inputs)}function _isNavigatorDefined(){return typeof navigator!=="undefined"&&navigator!=null}var isMobileMockValue;function mockIsMobile(value){isMobileMockValue=value}function isMobile(nav){if(isMobileMockValue!==undefined){return isMobileMockValue}if(nav||_isNavigatorDefined()){if(!nav){nav=navigator}if(nav.product==="ReactNative"){return true}var a=nav.userAgent||nav.vendor||(typeof window!=="undefined"?window.opera:"");if(!a){var navAny=nav;return navAny.userAgentData&&navAny.userAgentData.mobile}return/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))}return false}function isBrowser(){return typeof window!=="undefined"&&window.document!=null||typeof WorkerGlobalScope!=="undefined"}var device_util={__proto__:null,mockIsMobile:mockIsMobile,isMobile:isMobile,isBrowser:isBrowser};var ENV=env();ENV.registerFlag("DEBUG",function(){return false},function(debugValue){if(debugValue){console.warn("Debugging mode is ON. The output of every math call will "+"be downloaded to CPU and checked for NaNs. "+"This significantly impacts performance.")}});ENV.registerFlag("IS_BROWSER",function(){return isBrowser()});ENV.registerFlag("IS_NODE",function(){return typeof process!=="undefined"&&typeof process.versions!=="undefined"&&typeof process.versions.node!=="undefined"});ENV.registerFlag("IS_CHROME",function(){return typeof navigator!=="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor)});ENV.registerFlag("PROD",function(){return false});ENV.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",function(){return ENV.getBool("DEBUG")});ENV.registerFlag("DEPRECATION_WARNINGS_ENABLED",function(){return true});ENV.registerFlag("IS_TEST",function(){return false});ENV.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",function(){return true});ENV.registerFlag("WRAP_TO_IMAGEBITMAP",function(){return false});function inferShape(val,dtype){var firstElem=val;if(isTypedArray(val)){return dtype==="string"?[]:[val.length]}if(!Array.isArray(val)){return[]}var shape=[];while(Array.isArray(firstElem)||isTypedArray(firstElem)&&dtype!=="string"){shape.push(firstElem.length);firstElem=firstElem[0]}if(Array.isArray(val)&&env().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")){deepAssertShapeConsistency(val,shape,[])}return shape}function deepAssertShapeConsistency(val,shape,indices){indices=indices||[];if(!Array.isArray(val)&&!isTypedArray(val)){assert(shape.length===0,function(){return"Element arr["+indices.join("][")+"] is a primitive, "+("but should be an array/TypedArray of "+shape[0]+" elements")});return}assert(shape.length>0,function(){return"Element arr["+indices.join("][")+"] should be a primitive, "+("but is an array of "+val.length+" elements")});assert(val.length===shape[0],function(){return"Element arr["+indices.join("][")+"] should have "+shape[0]+" "+("elements, but has "+val.length+" elements")});var subShape=shape.slice(1);for(var i=0;i<val.length;++i){deepAssertShapeConsistency(val[i],subShape,indices.concat(i))}}function assertDtype(expectedDtype,actualDType,argName,functionName){if(expectedDtype==="string_or_numeric"){return}if(expectedDtype==null){throw new Error("Expected dtype cannot be null.")}if(expectedDtype!=="numeric"&&expectedDtype!==actualDType||expectedDtype==="numeric"&&actualDType==="string"){throw new Error("Argument '"+argName+"' passed to '"+functionName+"' must "+("be "+expectedDtype+" tensor, but got "+actualDType+" tensor"))}}function convertToTensor(x,argName,functionName,parseAsDtype){if(parseAsDtype===void 0){parseAsDtype="numeric"}if(x instanceof Tensor){assertDtype(parseAsDtype,x.dtype,argName,functionName);return x}var inferredDtype=inferDtype(x);if(inferredDtype!=="string"&&["bool","int32","float32"].indexOf(parseAsDtype)>=0){inferredDtype=parseAsDtype}assertDtype(parseAsDtype,inferredDtype,argName,functionName);if(x==null||!isTypedArray(x)&&!Array.isArray(x)&&typeof x!=="number"&&typeof x!=="boolean"&&typeof x!=="string"){var type=x==null?"null":x.constructor.name;throw new Error("Argument '"+argName+"' passed to '"+functionName+"' must be a "+("Tensor or TensorLike, but got '"+type+"'"))}var inferredShape=inferShape(x,inferredDtype);if(!isTypedArray(x)&&!Array.isArray(x)){x=[x]}var skipTypedArray=true;var values=inferredDtype!=="string"?toTypedArray(x,inferredDtype):flatten(x,[],skipTypedArray);return ENGINE.makeTensor(values,inferredShape,inferredDtype)}function convertToTensorArray(arg,argName,functionName,parseAsDtype){if(parseAsDtype===void 0){parseAsDtype="numeric"}if(!Array.isArray(arg)){throw new Error("Argument "+argName+" passed to "+functionName+" must be a "+"`Tensor[]` or `TensorLike[]`")}var tensors=arg;return tensors.map(function(t,i){return convertToTensor(t,argName+"["+i+"]",functionName,parseAsDtype)})}var OP_SCOPE_SUFFIX="__op";function op(f){var keys=Object.keys(f);if(keys.length!==1){throw new Error("Please provide an object with a single key "+"(operation name) mapping to a function. Got an object with "+(keys.length+" keys."))}var opName=keys[0];var fn=f[opName];if(opName.endsWith("_")){opName=opName.substring(0,opName.length-1)}opName=opName+OP_SCOPE_SUFFIX;var f2=function(){var args=[];for(var _i=0;_i<arguments.length;_i++){args[_i]=arguments[_i]}ENGINE.startScope(opName);try{var result=fn.apply(void 0,__spread(args));if(isPromise(result)){console.error("Cannot return a Promise inside of tidy.")}ENGINE.endScope(result);return result}catch(ex){ENGINE.endScope(null);throw ex}};Object.defineProperty(f2,"name",{value:opName,configurable:true});return f2}function complex_(real,imag){var $real=convertToTensor(real,"real","complex");var $imag=convertToTensor(imag,"imag","complex");assertShapesMatch($real.shape,$imag.shape,"real and imag shapes, "+$real.shape+" and "+$imag.shape+", "+"must match in call to tf.complex().");var inputs={real:$real,imag:$imag};return ENGINE.runKernel(Complex,inputs)}var complex=op({complex_:complex_});function makeTensor(values,shape,inferredShape,dtype){if(dtype==null){dtype=inferDtype(values)}if(dtype==="complex64"){throw new Error("Cannot construct a complex64 tensor directly. "+"Please use tf.complex(real, imag).")}if(!isTypedArray(values)&&!Array.isArray(values)&&typeof values!=="number"&&typeof values!=="boolean"&&typeof values!=="string"){throw new Error("values passed to tensor(values) must be a number/boolean/string or "+"an array of numbers/booleans/strings, or a TypedArray")}if(shape!=null){assertNonNegativeIntegerDimensions(shape);var providedSize_1=sizeFromShape(shape);var inferredSize_1=sizeFromShape(inferredShape);assert(providedSize_1===inferredSize_1,function(){return"Based on the provided shape, ["+shape+"], the tensor should have "+(providedSize_1+" values but has "+inferredSize_1)});for(var i=0;i<inferredShape.length;++i){var inferred=inferredShape[i];var flatDimsDontMatch=i===inferredShape.length-1?inferred!==sizeFromShape(shape.slice(i)):true;assert(inferredShape[i]===shape[i]||!flatDimsDontMatch,function(){return"Error creating a new Tensor. Inferred shape "+("("+inferredShape+") does not match the provided ")+("shape ("+shape+"). ")})}}if(!isTypedArray(values)&&!Array.isArray(values)){values=[values]}shape=shape||inferredShape;values=dtype!=="string"?toTypedArray(values,dtype):flatten(values,[],true);return ENGINE.makeTensor(values,shape,dtype)}function tensor(values,shape,dtype){var inferredShape=inferShape(values,dtype);return makeTensor(values,shape,inferredShape,dtype)}var DTYPE_VALUE_SIZE_MAP={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8};var NUM_BYTES_STRING_LENGTH=4;function encodeWeights(tensors,group){return __awaiter(this,void 0,void 0,function(){var specs,dataPromises,names,_loop_1,i,tensorValues;var _this=this;return __generator(this,function(_a){switch(_a.label){case 0:specs=[];dataPromises=[];names=Array.isArray(tensors)?tensors.map(function(tensor){return tensor.name}):Object.keys(tensors);_loop_1=function(i){var name=names[i];var t=Array.isArray(tensors)?tensors[i].tensor:tensors[name];if(t.dtype!=="float32"&&t.dtype!=="int32"&&t.dtype!=="bool"&&t.dtype!=="string"&&t.dtype!=="complex64"){throw new Error("Unsupported dtype in weight '"+name+"': "+t.dtype)}var spec={name:name,shape:t.shape,dtype:t.dtype};if(t.dtype==="string"){var utf8bytes=new Promise(function(resolve){return __awaiter(_this,void 0,void 0,function(){var vals,totalNumBytes,bytes,offset,i_1,val,bytesOfLength;return __generator(this,function(_a){switch(_a.label){case 0:return[4,t.bytes()];case 1:vals=_a.sent();totalNumBytes=vals.reduce(function(p,c){return p+c.length},0)+NUM_BYTES_STRING_LENGTH*vals.length;bytes=new Uint8Array(totalNumBytes);offset=0;for(i_1=0;i_1<vals.length;i_1++){val=vals[i_1];bytesOfLength=new Uint8Array(new Uint32Array([val.length]).buffer);bytes.set(bytesOfLength,offset);offset+=NUM_BYTES_STRING_LENGTH;bytes.set(val,offset);offset+=val.length}resolve(bytes);return[2]}})})});dataPromises.push(utf8bytes)}else{dataPromises.push(t.data())}if(group!=null){spec.group=group}specs.push(spec)};for(i=0;i<names.length;++i){_loop_1(i)}return[4,Promise.all(dataPromises)];case 1:tensorValues=_a.sent();return[2,{data:concatenateTypedArrays(tensorValues),specs:specs}]}})})}function decodeWeights(buffer,specs){var e_1,_a;var out={};var float16Decode;var offset=0;try{for(var specs_1=__values(specs),specs_1_1=specs_1.next();!specs_1_1.done;specs_1_1=specs_1.next()){var spec=specs_1_1.value;var name=spec.name;var dtype=spec.dtype;var shape=spec.shape;var size=sizeFromShape(shape);var values=void 0;if("quantization"in spec){var quantization=spec.quantization;if(quantization.dtype==="uint8"||quantization.dtype==="uint16"){if(!("min"in quantization&&"scale"in quantization)){throw new Error("Weight "+spec.name+" with quantization "+quantization.dtype+" "+"doesn't have corresponding metadata min and scale.")}}else if(quantization.dtype==="float16"){if(dtype!=="float32"){throw new Error("Weight "+spec.name+" is quantized with "+quantization.dtype+" "+("which only supports weights of type float32 not "+dtype+"."))}}else{throw new Error("Weight "+spec.name+" has unknown "+("quantization dtype "+quantization.dtype+". ")+"Supported quantization dtypes are: "+"'uint8', 'uint16', and 'float16'.")}var quantizationSizeFactor=DTYPE_VALUE_SIZE_MAP[quantization.dtype];var byteBuffer=buffer.slice(offset,offset+size*quantizationSizeFactor);var quantizedArray=quantization.dtype==="uint8"?new Uint8Array(byteBuffer):new Uint16Array(byteBuffer);if(dtype==="float32"){if(quantization.dtype==="uint8"||quantization.dtype==="uint16"){values=new Float32Array(quantizedArray.length);for(var i=0;i<quantizedArray.length;i++){var v=quantizedArray[i];values[i]=v*quantization.scale+quantization.min}}else if(quantization.dtype==="float16"){if(float16Decode===undefined){float16Decode=getFloat16Decoder()}values=float16Decode(quantizedArray)}else{throw new Error("Unsupported quantization type "+quantization.dtype+" "+"for weight type float32.")}}else if(dtype==="int32"){if(quantization.dtype!=="uint8"&&quantization.dtype!=="uint16"){throw new Error("Unsupported quantization type "+quantization.dtype+" "+"for weight type int32.")}values=new Int32Array(quantizedArray.length);for(var i=0;i<quantizedArray.length;i++){var v=quantizedArray[i];values[i]=Math.round(v*quantization.scale+quantization.min)}}else{throw new Error("Unsupported dtype in weight '"+name+"': "+dtype)}offset+=size*quantizationSizeFactor}else if(dtype==="string"){var size_1=sizeFromShape(spec.shape);values=[];for(var i=0;i<size_1;i++){var byteLength=new Uint32Array(buffer.slice(offset,offset+NUM_BYTES_STRING_LENGTH))[0];offset+=NUM_BYTES_STRING_LENGTH;var bytes=new Uint8Array(buffer.slice(offset,offset+byteLength));values.push(bytes);offset+=byteLength}}else{var dtypeFactor=DTYPE_VALUE_SIZE_MAP[dtype];var byteBuffer=buffer.slice(offset,offset+size*dtypeFactor);if(dtype==="float32"){values=new Float32Array(byteBuffer)}else if(dtype==="int32"){values=new Int32Array(byteBuffer)}else if(dtype==="bool"){values=new Uint8Array(byteBuffer)}else if(dtype==="complex64"){values=new Float32Array(byteBuffer);var real=new Float32Array(values.length/2);var image=new Float32Array(values.length/2);for(var i=0;i<real.length;i++){real[i]=values[i*2];image[i]=values[i*2+1]}var realTensor=tensor(real,shape,"float32");var imageTensor=tensor(image,shape,"float32");out[name]=complex(realTensor,imageTensor);realTensor.dispose();imageTensor.dispose()}else{throw new Error("Unsupported dtype in weight '"+name+"': "+dtype)}offset+=size*dtypeFactor}if(dtype!=="complex64"){out[name]=tensor(values,shape,dtype)}}}catch(e_1_1){e_1={error:e_1_1}}finally{try{if(specs_1_1&&!specs_1_1.done&&(_a=specs_1.return))_a.call(specs_1)}finally{if(e_1)throw e_1.error}}return out}function concatenateTypedArrays(xs){if(xs===null){throw new Error("Invalid input value: "+JSON.stringify(xs))}var totalByteLength=0;var normalizedXs=[];xs.forEach(function(x){totalByteLength+=x.byteLength;normalizedXs.push(x.byteLength===x.buffer.byteLength?x:new x.constructor(x));if(!(x instanceof Float32Array||x instanceof Int32Array||x instanceof Uint8Array)){throw new Error("Unsupported TypedArray subtype: "+x.constructor.name)}});var y=new Uint8Array(totalByteLength);var offset=0;normalizedXs.forEach(function(x){y.set(new Uint8Array(x.buffer),offset);offset+=x.byteLength});return y.buffer}var useNodeBuffer=typeof Buffer!=="undefined"&&(typeof Blob==="undefined"||typeof atob==="undefined"||typeof btoa==="undefined");function stringByteLength(str){if(useNodeBuffer){return Buffer.byteLength(str)}return new Blob([str]).size}function arrayBufferToBase64String(buffer){if(useNodeBuffer){return Buffer.from(buffer).toString("base64")}var buf=new Uint8Array(buffer);var s="";for(var i=0,l=buf.length;i<l;i++){s+=String.fromCharCode(buf[i])}return btoa(s)}function base64StringToArrayBuffer(str){if(useNodeBuffer){var buf=Buffer.from(str,"base64");return buf.buffer.slice(buf.byteOffset,buf.byteOffset+buf.byteLength)}var s=atob(str);var buffer=new Uint8Array(s.length);for(var i=0;i<s.length;++i){buffer.set([s.charCodeAt(i)],i)}return buffer.buffer}function concatenateArrayBuffers(buffers){if(buffers.length===1){return buffers[0]}var totalByteLength=0;buffers.forEach(function(buffer){totalByteLength+=buffer.byteLength});var temp=new Uint8Array(totalByteLength);var offset=0;buffers.forEach(function(buffer){temp.set(new Uint8Array(buffer),offset);offset+=buffer.byteLength});return temp.buffer}function basename(path){var SEPARATOR="/";path=path.trim();while(path.endsWith(SEPARATOR)){path=path.slice(0,path.length-1)}var items=path.split(SEPARATOR);return items[items.length-1]}function getModelJSONForModelArtifacts(artifacts,manifest){var result={modelTopology:artifacts.modelTopology,format:artifacts.format,generatedBy:artifacts.generatedBy,convertedBy:artifacts.convertedBy,weightsManifest:manifest};if(artifacts.signature!=null){result.signature=artifacts.signature}if(artifacts.userDefinedMetadata!=null){result.userDefinedMetadata=artifacts.userDefinedMetadata}if(artifacts.modelInitializer!=null){result.modelInitializer=artifacts.modelInitializer}if(artifacts.trainingConfig!=null){result.trainingConfig=artifacts.trainingConfig}return result}function getModelArtifactsForJSON(modelJSON,loadWeights){return __awaiter(this,void 0,void 0,function(){var modelArtifacts,_a,weightSpecs,weightData;return __generator(this,function(_b){switch(_b.label){case 0:modelArtifacts={modelTopology:modelJSON.modelTopology,format:modelJSON.format,generatedBy:modelJSON.generatedBy,convertedBy:modelJSON.convertedBy};if(modelJSON.trainingConfig!=null){modelArtifacts.trainingConfig=modelJSON.trainingConfig}if(!(modelJSON.weightsManifest!=null))return[3,2];return[4,loadWeights(modelJSON.weightsManifest)];case 1:_a=__read.apply(void 0,[_b.sent(),2]),weightSpecs=_a[0],weightData=_a[1];modelArtifacts.weightSpecs=weightSpecs;modelArtifacts.weightData=weightData;_b.label=2;case 2:if(modelJSON.signature!=null){modelArtifacts.signature=modelJSON.signature}if(modelJSON.userDefinedMetadata!=null){modelArtifacts.userDefinedMetadata=modelJSON.userDefinedMetadata}if(modelJSON.modelInitializer!=null){modelArtifacts.modelInitializer=modelJSON.modelInitializer}return[2,modelArtifacts]}})})}function getModelArtifactsInfoForJSON(modelArtifacts){if(modelArtifacts.modelTopology instanceof ArrayBuffer){throw new Error("Expected JSON model topology, received ArrayBuffer.")}return{dateSaved:new Date,modelTopologyType:"JSON",modelTopologyBytes:modelArtifacts.modelTopology==null?0:stringByteLength(JSON.stringify(modelArtifacts.modelTopology)),weightSpecsBytes:modelArtifacts.weightSpecs==null?0:stringByteLength(JSON.stringify(modelArtifacts.weightSpecs)),weightDataBytes:modelArtifacts.weightData==null?0:modelArtifacts.weightData.byteLength}}function computeFloat16MantisaTable(){var convertMantissa=function(i){var m=i<<13;var e=0;while((m&8388608)===0){e-=8388608;m<<=1}m&=~8388608;e+=947912704;return m|e};var mantisaTable=new Uint32Array(2048);mantisaTable[0]=0;for(var i=1;i<1024;i++){mantisaTable[i]=convertMantissa(i)}for(var i=1024;i<2048;i++){mantisaTable[i]=939524096+(i-1024<<13)}return mantisaTable}function computeFloat16ExponentTable(){var exponentTable=new Uint32Array(64);exponentTable[0]=0;exponentTable[31]=1199570944;exponentTable[32]=2147483648;exponentTable[63]=3347054592;for(var i=1;i<31;i++){exponentTable[i]=i<<23}for(var i=33;i<63;i++){exponentTable[i]=2147483648+(i-32<<23)}return exponentTable}function computeFloat16OffsetTable(){var offsetTable=new Uint32Array(64);for(var i=0;i<64;i++){offsetTable[i]=1024}offsetTable[0]=offsetTable[32]=0;return offsetTable}function getFloat16Decoder(){var mantisaTable=computeFloat16MantisaTable();var exponentTable=computeFloat16ExponentTable();var offsetTable=computeFloat16OffsetTable();return function(quantizedArray){var buffer=new ArrayBuffer(4*quantizedArray.length);var bufferUint32View=new Uint32Array(buffer);for(var index=0;index<quantizedArray.length;index++){var float16Bits=quantizedArray[index];var float32Bits=mantisaTable[offsetTable[float16Bits>>10]+(float16Bits&1023)]+exponentTable[float16Bits>>10];bufferUint32View[index]=float32Bits}return new Float32Array(buffer)}}var IORouterRegistry=function(){function IORouterRegistry(){this.saveRouters=[];this.loadRouters=[]}IORouterRegistry.getInstance=function(){if(IORouterRegistry.instance==null){IORouterRegistry.instance=new IORouterRegistry}return IORouterRegistry.instance};IORouterRegistry.registerSaveRouter=function(saveRouter){IORouterRegistry.getInstance().saveRouters.push(saveRouter)};IORouterRegistry.registerLoadRouter=function(loadRouter){IORouterRegistry.getInstance().loadRouters.push(loadRouter)};IORouterRegistry.getSaveHandlers=function(url){return IORouterRegistry.getHandlers(url,"save")};IORouterRegistry.getLoadHandlers=function(url,loadOptions){return IORouterRegistry.getHandlers(url,"load",loadOptions)};IORouterRegistry.getHandlers=function(url,handlerType,loadOptions){var validHandlers=[];var routers=handlerType==="load"?IORouterRegistry.getInstance().loadRouters:IORouterRegistry.getInstance().saveRouters;routers.forEach(function(router){var handler=router(url,loadOptions);if(handler!==null){validHandlers.push(handler)}});return validHandlers};return IORouterRegistry}();var registerSaveRouter=function(loudRouter){return IORouterRegistry.registerSaveRouter(loudRouter)};var registerLoadRouter=function(loudRouter){return IORouterRegistry.registerLoadRouter(loudRouter)};var getSaveHandlers=function(url){return IORouterRegistry.getSaveHandlers(url)};var getLoadHandlers=function(url,loadOptions){return IORouterRegistry.getLoadHandlers(url,loadOptions)};var DATABASE_NAME="tensorflowjs";var DATABASE_VERSION=1;var MODEL_STORE_NAME="models_store";var INFO_STORE_NAME="model_info_store";function getIndexedDBFactory(){if(!env().getBool("IS_BROWSER")){throw new Error("Failed to obtain IndexedDB factory because the current environment"+"is not a web browser.")}var theWindow=typeof window==="undefined"?self:window;var factory=theWindow.indexedDB||theWindow.mozIndexedDB||theWindow.webkitIndexedDB||theWindow.msIndexedDB||theWindow.shimIndexedDB;if(factory==null){throw new Error("The current browser does not appear to support IndexedDB.")}return factory}function setUpDatabase(openRequest){var db=openRequest.result;db.createObjectStore(MODEL_STORE_NAME,{keyPath:"modelPath"});db.createObjectStore(INFO_STORE_NAME,{keyPath:"modelPath"})}var BrowserIndexedDB=function(){function BrowserIndexedDB(modelPath){this.indexedDB=getIndexedDBFactory();if(modelPath==null||!modelPath){throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.")}this.modelPath=modelPath}BrowserIndexedDB.prototype.save=function(modelArtifacts){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(_a){if(modelArtifacts.modelTopology instanceof ArrayBuffer){throw new Error("BrowserLocalStorage.save() does not support saving model topology "+"in binary formats yet.")}return[2,this.databaseAction(this.modelPath,modelArtifacts)]})})};BrowserIndexedDB.prototype.load=function(){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(_a){return[2,this.databaseAction(this.modelPath)]})})};BrowserIndexedDB.prototype.databaseAction=function(modelPath,modelArtifacts){var _this=this;return new Promise(function(resolve,reject){var openRequest=_this.indexedDB.open(DATABASE_NAME,DATABASE_VERSION);openRequest.onupgradeneeded=function(){return setUpDatabase(openRequest)};openRequest.onsuccess=function(){var db=openRequest.result;if(modelArtifacts==null){var modelTx=db.transaction(MODEL_STORE_NAME,"readonly");var modelStore=modelTx.objectStore(MODEL_STORE_NAME);var getRequest_1=modelStore.get(_this.modelPath);getRequest_1.onsuccess=function(){if(getRequest_1.result==null){db.close();return reject(new Error("Cannot find model with path '"+_this.modelPath+"' "+"in IndexedDB."))}else{resolve(getRequest_1.result.modelArtifacts)}};getRequest_1.onerror=function(error){db.close();return reject(getRequest_1.error)};modelTx.oncomplete=function(){return db.close()}}else{var modelArtifactsInfo_1=getModelArtifactsInfoForJSON(modelArtifacts);var infoTx_1=db.transaction(INFO_STORE_NAME,"readwrite");var infoStore_1=infoTx_1.objectStore(INFO_STORE_NAME);var putInfoRequest_1=infoStore_1.put({modelPath:_this.modelPath,modelArtifactsInfo:modelArtifactsInfo_1});var modelTx_1;putInfoRequest_1.onsuccess=function(){modelTx_1=db.transaction(MODEL_STORE_NAME,"readwrite");var modelStore=modelTx_1.objectStore(MODEL_STORE_NAME);var putModelRequest=modelStore.put({modelPath:_this.modelPath,modelArtifacts:modelArtifacts,modelArtifactsInfo:modelArtifactsInfo_1});putModelRequest.onsuccess=function(){return resolve({modelArtifactsInfo:modelArtifactsInfo_1})};putModelRequest.onerror=function(error){infoStore_1=infoTx_1.objectStore(INFO_STORE_NAME);var deleteInfoRequest=infoStore_1.delete(_this.modelPath);deleteInfoRequest.onsuccess=function(){db.close();return reject(putModelRequest.error)};deleteInfoRequest.onerror=function(error){db.close();return reject(putModelRequest.error)}}};putInfoRequest_1.onerror=function(error){db.close();return reject(putInfoRequest_1.error)};infoTx_1.oncomplete=function(){if(modelTx_1==null){db.close()}else{modelTx_1.oncomplete=function(){return db.close()}}}}};openRequest.onerror=function(error){return reject(openRequest.error)}})};return BrowserIndexedDB}();BrowserIndexedDB.URL_SCHEME="indexeddb://";var indexedDBRouter=function(url){if(!env().getBool("IS_BROWSER")){return null}else{if(!Array.isArray(url)&&url.startsWith(BrowserIndexedDB.URL_SCHEME)){return browserIndexedDB(url.slice(BrowserIndexedDB.URL_SCHEME.length))}else{return null}}};IORouterRegistry.registerSaveRouter(indexedDBRouter);IORouterRegistry.registerLoadRouter(indexedDBRouter);function browserIndexedDB(modelPath){return new BrowserIndexedDB(modelPath)}function maybeStripScheme$1(key){return key.startsWith(BrowserIndexedDB.URL_SCHEME)?key.slice(BrowserIndexedDB.URL_SCHEME.length):key}var BrowserIndexedDBManager=function(){function BrowserIndexedDBManager(){this.indexedDB=getIndexedDBFactory()}BrowserIndexedDBManager.prototype.listModels=function(){return __awaiter(this,void 0,void 0,function(){var _this=this;return __generator(this,function(_a){return[2,new Promise(function(resolve,reject){var openRequest=_this.indexedDB.open(DATABASE_NAME,DATABASE_VERSION);openRequest.onupgradeneeded=function(){return setUpDatabase(openRequest)};openRequest.onsuccess=function(){var db=openRequest.result;var tx=db.transaction(INFO_STORE_NAME,"readonly");var store=tx.objectStore(INFO_STORE_NAME);var getAllInfoRequest=store.getAll();getAllInfoRequest.onsuccess=function(){var e_1,_a;var out={};try{for(var _b=__values(getAllInfoRequest.result),_c=_b.next();!_c.done;_c=_b.next()){var item=_c.value;out[item.modelPath]=item.modelArtifactsInfo}}catch(e_1_1){e_1={error:e_1_1}}finally{try{if(_c&&!_c.done&&(_a=_b.return))_a.call(_b)}finally{if(e_1)throw e_1.error}}resolve(out)};getAllInfoRequest.onerror=function(error){db.close();return reject(getAllInfoRequest.error)};tx.oncomplete=function(){return db.close()}};openRequest.onerror=function(error){return reject(openRequest.error)}})]})})};BrowserIndexedDBManager.prototype.removeModel=function(path){return __awaiter(this,void 0,void 0,function(){var _this=this;return __generator(this,function(_a){path=maybeStripScheme$1(path);return[2,new Promise(function(resolve,reject){var openRequest=_this.indexedDB.open(DATABASE_NAME,DATABASE_VERSION);openRequest.onupgradeneeded=function(){return setUpDatabase(openRequest)};openRequest.onsuccess=function(){var db=openRequest.result;var infoTx=db.transaction(INFO_STORE_NAME,"readwrite");var infoStore=infoTx.objectStore(INFO_STORE_NAME);var getInfoRequest=infoStore.get(path);var modelTx;getInfoRequest.onsuccess=function(){if(getInfoRequest.result==null){db.close();return reject(new Error("Cannot find model with path '"+path+"' "+"in IndexedDB."))}else{var deleteInfoRequest=infoStore.delete(path);var deleteModelData_1=function(){modelTx=db.transaction(MODEL_STORE_NAME,"readwrite");var modelStore=modelTx.objectStore(MODEL_STORE_NAME);var deleteModelRequest=modelStore.delete(path);deleteModelRequest.onsuccess=function(){return resolve(getInfoRequest.result.modelArtifactsInfo)};deleteModelRequest.onerror=function(error){return reject(getInfoRequest.error)}};deleteInfoRequest.onsuccess=deleteModelData_1;deleteInfoRequest.onerror=function(error){deleteModelData_1();db.close();return reject(getInfoRequest.error)}}};getInfoRequest.onerror=function(error){db.close();return reject(getInfoRequest.error)};infoTx.oncomplete=function(){if(modelTx==null){db.close()}else{modelTx.oncomplete=function(){return db.close()}}}};openRequest.onerror=function(error){return reject(openRequest.error)}})]})})};return BrowserIndexedDBManager}();var PATH_SEPARATOR="/";var PATH_PREFIX="tensorflowjs_models";var INFO_SUFFIX="info";var MODEL_TOPOLOGY_SUFFIX="model_topology";var WEIGHT_SPECS_SUFFIX="weight_specs";var WEIGHT_DATA_SUFFIX="weight_data";var MODEL_METADATA_SUFFIX="model_metadata";function getModelKeys(path){return{info:[PATH_PREFIX,path,INFO_SUFFIX].join(PATH_SEPARATOR),topology:[PATH_PREFIX,path,MODEL_TOPOLOGY_SUFFIX].join(PATH_SEPARATOR),weightSpecs:[PATH_PREFIX,path,WEIGHT_SPECS_SUFFIX].join(PATH_SEPARATOR),weightData:[PATH_PREFIX,path,WEIGHT_DATA_SUFFIX].join(PATH_SEPARATOR),modelMetadata:[PATH_PREFIX,path,MODEL_METADATA_SUFFIX].join(PATH_SEPARATOR)}}function removeItems(keys){var e_1,_a;try{for(var _b=__values(Object.values(keys)),_c=_b.next();!_c.done;_c=_b.next()){var key=_c.value;window.localStorage.removeItem(key)}}catch(e_1_1){e_1={error:e_1_1}}finally{try{if(_c&&!_c.done&&(_a=_b.return))_a.call(_b)}finally{if(e_1)throw e_1.error}}}function getModelPathFromKey(key){var items=key.split(PATH_SEPARATOR);if(items.length<3){throw new Error("Invalid key format: "+key)}return items.slice(1,items.length-1).join(PATH_SEPARATOR)}function maybeStripScheme(key){return key.startsWith(BrowserLocalStorage.URL_SCHEME)?key.slice(BrowserLocalStorage.URL_SCHEME.length):key}var BrowserLocalStorage=function(){function BrowserLocalStorage(modelPath){if(!env().getBool("IS_BROWSER")||typeof window==="undefined"||typeof window.localStorage==="undefined"){throw new Error("The current environment does not support local storage.")}this.LS=window.localStorage;if(modelPath==null||!modelPath){throw new Error("For local storage, modelPath must not be null, undefined or empty.")}this.modelPath=modelPath;this.keys=getModelKeys(this.modelPath)}BrowserLocalStorage.prototype.save=function(modelArtifacts){return __awaiter(this,void 0,void 0,function(){var topology,weightSpecs,modelArtifactsInfo,metadata;return __generator(this,function(_a){if(modelArtifacts.modelTopology instanceof ArrayBuffer){throw new Error("BrowserLocalStorage.save() does not support saving model topology "+"in binary formats yet.")}else{topology=JSON.stringify(modelArtifacts.modelTopology);weightSpecs=JSON.stringify(modelArtifacts.weightSpecs);modelArtifactsInfo=getModelArtifactsInfoForJSON(modelArtifacts);try{this.LS.setItem(this.keys.info,JSON.stringify(modelArtifactsInfo));this.LS.setItem(this.keys.topology,topology);this.LS.setItem(this.keys.weightSpecs,weightSpecs);this.LS.setItem(this.keys.weightData,arrayBufferToBase64String(modelArtifacts.weightData));metadata={format:modelArtifacts.format,generatedBy:modelArtifacts.generatedBy,convertedBy:modelArtifacts.convertedBy,signature:modelArtifacts.signature!=null?modelArtifacts.signature:undefined,userDefinedMetadata:modelArtifacts.userDefinedMetadata!=null?modelArtifacts.userDefinedMetadata:undefined,modelInitializer:modelArtifacts.modelInitializer!=null?modelArtifacts.modelInitializer:undefined,trainingConfig:modelArtifacts.trainingConfig!=null?modelArtifacts.trainingConfig:undefined};this.LS.setItem(this.keys.modelMetadata,JSON.stringify(metadata));return[2,{modelArtifactsInfo:modelArtifactsInfo}]}catch(err){removeItems(this.keys);throw new Error("Failed to save model '"+this.modelPath+"' to local storage: "+"size quota being exceeded is a possible cause of this failure: "+("modelTopologyBytes="+modelArtifactsInfo.modelTopologyBytes+", ")+("weightSpecsBytes="+modelArtifactsInfo.weightSpecsBytes+", ")+("weightDataBytes="+modelArtifactsInfo.weightDataBytes+"."))}}return[2]})})};BrowserLocalStorage.prototype.load=function(){return __awaiter(this,void 0,void 0,function(){var info,out,topology,weightSpecs,metadataString,metadata,weightDataBase64;return __generator(this,function(_a){info=JSON.parse(this.LS.getItem(this.keys.info));if(info==null){throw new Error("In local storage, there is no model with name '"+this.modelPath+"'")}if(info.modelTopologyType!=="JSON"){throw new Error("BrowserLocalStorage does not support loading non-JSON model "+"topology yet.")}out={};topology=JSON.parse(this.LS.getItem(this.keys.topology));if(topology==null){throw new Error("In local storage, the topology of model '"+this.modelPath+"' "+"is missing.")}out.modelTopology=topology;weightSpecs=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(weightSpecs==null){throw new Error("In local storage, the weight specs of model '"+this.modelPath+"' "+"are missing.")}out.weightSpecs=weightSpecs;metadataString=this.LS.getItem(this.keys.modelMetadata);if(metadataString!=null){metadata=JSON.parse(metadataString);out.format=metadata.format;out.generatedBy=metadata.generatedBy;out.convertedBy=metadata.convertedBy;if(metadata.signature!=null){out.signature=metadata.signature}if(metadata.userDefinedMetadata!=null){out.userDefinedMetadata=metadata.userDefinedMetadata}if(metadata.modelInitializer!=null){out.modelInitializer=metadata.modelInitializer}if(metadata.trainingConfig!=null){out.trainingConfig=metadata.trainingConfig}}weightDataBase64=this.LS.getItem(this.keys.weightData);if(weightDataBase64==null){throw new Error("In local storage, the binary weight values of model "+("'"+this.modelPath+"' are missing."))}out.weightData=base64StringToArrayBuffer(weightDataBase64);return[2,out]})})};return BrowserLocalStorage}();BrowserLocalStorage.URL_SCHEME="localstorage://";var localStorageRouter=function(url){if(!env().getBool("IS_BROWSER")){return null}else{if(!Array.isArray(url)&&url.startsWith(BrowserLocalStorage.URL_SCHEME)){return browserLocalStorage(url.slice(BrowserLocalStorage.URL_SCHEME.length))}else{return null}}};IORouterRegistry.registerSaveRouter(localStorageRouter);IORouterRegistry.registerLoadRouter(localStorageRouter);function browserLocalStorage(modelPath){return new BrowserLocalStorage(modelPath)}var BrowserLocalStorageManager=function(){function BrowserLocalStorageManager(){assert(env().getBool("IS_BROWSER"),function(){return"Current environment is not a web browser"});assert(typeof window==="undefined"||typeof window.localStorage!=="undefined",function(){return"Current browser does not appear to support localStorage"});this.LS=window.localStorage}BrowserLocalStorageManager.prototype.listModels=function(){return __awaiter(this,void 0,void 0,function(){var out,prefix,suffix,i,key,modelPath;return __generator(this,function(_a){out={};prefix=PATH_PREFIX+PATH_SEPARATOR;suffix=PATH_SEPARATOR+INFO_SUFFIX;for(i=0;i<this.LS.length;++i){key=this.LS.key(i);if(key.startsWith(prefix)&&key.endsWith(suffix)){modelPath=getModelPathFromKey(key);out[modelPath]=JSON.parse(this.LS.getItem(key))}}return[2,out]})})};BrowserLocalStorageManager.prototype.removeModel=function(path){return __awaiter(this,void 0,void 0,function(){var keys,info;return __generator(this,function(_a){path=maybeStripScheme(path);keys=getModelKeys(path);if(this.LS.getItem(keys.info)==null){throw new Error("Cannot find model at path '"+path+"'")}info=JSON.parse(this.LS.getItem(keys.info));removeItems(keys);return[2,info]})})};return BrowserLocalStorageManager}();var URL_SCHEME_SUFFIX="://";var ModelStoreManagerRegistry=function(){function ModelStoreManagerRegistry(){this.managers={}}ModelStoreManagerRegistry.getInstance=function(){if(ModelStoreManagerRegistry.instance==null){ModelStoreManagerRegistry.instance=new ModelStoreManagerRegistry}return ModelStoreManagerRegistry.instance};ModelStoreManagerRegistry.registerManager=function(scheme,manager){assert(scheme!=null,function(){return"scheme must not be undefined or null."});if(scheme.endsWith(URL_SCHEME_SUFFIX)){scheme=scheme.slice(0,scheme.indexOf(URL_SCHEME_SUFFIX))}assert(scheme.length>0,function(){return"scheme must not be an empty string."});var registry=ModelStoreManagerRegistry.getInstance();assert(registry.managers[scheme]==null,function(){return"A model store manager is already registered for scheme '"+scheme+"'."});registry.managers[scheme]=manager};ModelStoreManagerRegistry.getManager=function(scheme){var manager=this.getInstance().managers[scheme];if(manager==null){throw new Error("Cannot find model manager for scheme '"+scheme+"'")}return manager};ModelStoreManagerRegistry.getSchemes=function(){return Object.keys(this.getInstance().managers)};return ModelStoreManagerRegistry}();function parseURL(url){if(url.indexOf(URL_SCHEME_SUFFIX)===-1){throw new Error("The url string provided does not contain a scheme. "+"Supported schemes are: "+(""+ModelStoreManagerRegistry.getSchemes().join(",")))}return{scheme:url.split(URL_SCHEME_SUFFIX)[0],path:url.split(URL_SCHEME_SUFFIX)[1]}}function cloneModelInternal(sourceURL,destURL,deleteSource){if(deleteSource===void 0){deleteSource=false}return __awaiter(this,void 0,void 0,function(){var loadHandlers,loadHandler,saveHandlers,saveHandler,sourceScheme,sourcePath,sameMedium,modelArtifacts,saveResult;return __generator(this,function(_a){switch(_a.label){case 0:assert(sourceURL!==destURL,function(){return"Old path and new path are the same: '"+sourceURL+"'"});loadHandlers=IORouterRegistry.getLoadHandlers(sourceURL);assert(loadHandlers.length>0,function(){return"Copying failed because no load handler is found for source URL "+sourceURL+"."});assert(loadHandlers.length<2,function(){return"Copying failed because more than one ("+loadHandlers.length+") "+("load handlers for source URL "+sourceURL+".")});loadHandler=loadHandlers[0];saveHandlers=IORouterRegistry.getSaveHandlers(destURL);assert(saveHandlers.length>0,function(){return"Copying failed because no save handler is found for destination "+("URL "+destURL+".")});assert(saveHandlers.length<2,function(){return"Copying failed because more than one ("+loadHandlers.length+") "+("save handlers for destination URL "+destURL+".")});saveHandler=saveHandlers[0];sourceScheme=parseURL(sourceURL).scheme;sourcePath=parseURL(sourceURL).path;sameMedium=sourceScheme===parseURL(sourceURL).scheme;return[4,loadHandler.load()];case 1:modelArtifacts=_a.sent();if(!(deleteSource&&sameMedium))return[3,3];return[4,ModelStoreManagerRegistry.getManager(sourceScheme).removeModel(sourcePath)];case 2:_a.sent();_a.label=3;case 3:return[4,saveHandler.save(modelArtifacts)];case 4:saveResult=_a.sent();if(!(deleteSource&&!sameMedium))return[3,6];return[4,ModelStoreManagerRegistry.getManager(sourceScheme).removeModel(sourcePath)];case 5:_a.sent();_a.label=6;case 6:return[2,saveResult.modelArtifactsInfo]}})})}function listModels(){return __awaiter(this,void 0,void 0,function(){var schemes,out,schemes_1,schemes_1_1,scheme,schemeOut,path,url,e_1_1;var e_1,_a;return __generator(this,function(_b){switch(_b.label){case 0:schemes=ModelStoreManagerRegistry.getSchemes();out={};_b.label=1;case 1:_b.trys.push([1,6,7,8]);schemes_1=__values(schemes),schemes_1_1=schemes_1.next();_b.label=2;case 2:if(!!schemes_1_1.done)return[3,5];scheme=schemes_1_1.value;return[4,ModelStoreManagerRegistry.getManager(scheme).listModels()];case 3:schemeOut=_b.sent();for(path in schemeOut){url=scheme+URL_SCHEME_SUFFIX+path;out[url]=schemeOut[path]}_b.label=4;case 4:schemes_1_1=schemes_1.next();return[3,2];case 5:return[3,8];case 6:e_1_1=_b.sent();e_1={error:e_1_1};return[3,8];case 7:try{if(schemes_1_1&&!schemes_1_1.done&&(_a=schemes_1.return))_a.call(schemes_1)}finally{if(e_1)throw e_1.error}return[7];case 8:return[2,out]}})})}function removeModel(url){return __awaiter(this,void 0,void 0,function(){var schemeAndPath,manager;return __generator(this,function(_a){schemeAndPath=parseURL(url);manager=ModelStoreManagerRegistry.getManager(schemeAndPath.scheme);return[2,manager.removeModel(schemeAndPath.path)]})})}function copyModel(sourceURL,destURL){return __awaiter(this,void 0,void 0,function(){var deleteSource;return __generator(this,function(_a){deleteSource=false;return[2,cloneModelInternal(sourceURL,destURL,deleteSource)]})})}function moveModel(sourceURL,destURL){return __awaiter(this,void 0,void 0,function(){var deleteSource;return __generator(this,function(_a){deleteSource=true;return[2,cloneModelInternal(sourceURL,destURL,deleteSource)]})})}var PlatformBrowser=function(){function PlatformBrowser(){}PlatformBrowser.prototype.fetch=function(path,init){return fetch(path,init)};PlatformBrowser.prototype.now=function(){return performance.now()};PlatformBrowser.prototype.encode=function(text,encoding){if(encoding!=="utf-8"&&encoding!=="utf8"){throw new Error("Browser's encoder only supports utf-8, but got "+encoding)}if(this.textEncoder==null){this.textEncoder=new TextEncoder}return this.textEncoder.encode(text)};PlatformBrowser.prototype.decode=function(bytes,encoding){return new TextDecoder(encoding).decode(bytes)};return PlatformBrowser}();if(env().get("IS_BROWSER")){env().setPlatform("browser",new PlatformBrowser);try{ModelStoreManagerRegistry.registerManager(BrowserLocalStorage.URL_SCHEME,new BrowserLocalStorageManager)}catch(err){}try{ModelStoreManagerRegistry.registerManager(BrowserIndexedDB.URL_SCHEME,new BrowserIndexedDBManager)}catch(err){}}var getNodeFetch={importFetch:function(){return require("node-fetch")}};var systemFetch;var PlatformNode=function(){function PlatformNode(){this.util=require("util");this.textEncoder=new this.util.TextEncoder}PlatformNode.prototype.fetch=function(path,requestInits){if(env().global.fetch!=null){return env().global.fetch(path,requestInits)}if(systemFetch==null){systemFetch=getNodeFetch.importFetch()}return systemFetch(path,requestInits)};PlatformNode.prototype.now=function(){var time=process.hrtime();return time[0]*1e3+time[1]/1e6};PlatformNode.prototype.encode=function(text,encoding){if(encoding!=="utf-8"&&encoding!=="utf8"){throw new Error("Node built-in encoder only supports utf-8, but got "+encoding)}return this.textEncoder.encode(text)};PlatformNode.prototype.decode=function(bytes,encoding){if(bytes.length===0){return""}return new this.util.TextDecoder(encoding).decode(bytes)};return PlatformNode}();if(env().get("IS_NODE")){env().setPlatform("node",new PlatformNode)}function buffer(shape,dtype,values){if(dtype===void 0){dtype="float32"}dtype=dtype||"float32";assertNonNegativeIntegerDimensions(shape);return new TensorBuffer(shape,dtype,values)}function cast_(x,dtype){var $x=convertToTensor(x,"x","cast");if(!isValidDtype(dtype)){throw new Error("Failed to cast to unknown dtype "+dtype)}if(dtype==="string"&&$x.dtype!=="string"||dtype!=="string"&&$x.dtype==="string"){throw new Error("Only strings can be casted to strings")}var inputs={x:$x};var attrs={dtype:dtype};return ENGINE.runKernel(Cast,inputs,attrs)}var cast=op({cast_:cast_});function clone_(x){var $x=convertToTensor(x,"x","clone","string_or_numeric");var inputs={x:$x};return ENGINE.runKernel(Identity,inputs)}var clone=op({clone_:clone_});function print(x,verbose){if(verbose===void 0){verbose=false}console.log(x.toString(verbose))}getOrMakeEngine();var opHandler={buffer:buffer,cast:cast,clone:clone,print:print};setOpHandler(opHandler);var DEFAULT_FILE_NAME_PREFIX="model";var DEFAULT_JSON_EXTENSION_NAME=".json";var DEFAULT_WEIGHT_DATA_EXTENSION_NAME=".weights.bin";function defer(f){return new Promise(function(resolve){return setTimeout(resolve)}).then(f)}var BrowserDownloads=function(){function BrowserDownloads(fileNamePrefix){if(!env().getBool("IS_BROWSER")){throw new Error("browserDownloads() cannot proceed because the current environment "+"is not a browser.")}if(fileNamePrefix.startsWith(BrowserDownloads.URL_SCHEME)){fileNamePrefix=fileNamePrefix.slice(BrowserDownloads.URL_SCHEME.length)}if(fileNamePrefix==null||fileNamePrefix.length===0){fileNamePrefix=DEFAULT_FILE_NAME_PREFIX}this.modelJsonFileName=fileNamePrefix+DEFAULT_JSON_EXTENSION_NAME;this.weightDataFileName=fileNamePrefix+DEFAULT_WEIGHT_DATA_EXTENSION_NAME}BrowserDownloads.prototype.save=function(modelArtifacts){return __awaiter(this,void 0,void 0,function(){var weightsURL,weightsManifest,modelJSON,modelJsonURL,jsonAnchor_1,weightDataAnchor_1;return __generator(this,function(_a){switch(_a.label){case 0:if(typeof document==="undefined"){throw new Error("Browser downloads are not supported in "+"this environment since `document` is not present")}weightsURL=window.URL.createObjectURL(new Blob([modelArtifacts.weightData],{type:"application/octet-stream"}));if(!(modelArtifacts.modelTopology instanceof ArrayBuffer))return[3,1];throw new Error("BrowserDownloads.save() does not support saving model topology "+"in binary formats yet.");case 1:weightsManifest=[{paths:["./"+this.weightDataFileName],weights:modelArtifacts.weightSpecs}];modelJSON=getModelJSONForModelArtifacts(modelArtifacts,weightsManifest);modelJsonURL=window.URL.createObjectURL(new Blob([JSON.stringify(modelJSON)],{type:"application/json"}));jsonAnchor_1=this.modelJsonAnchor==null?document.createElement("a"):this.modelJsonAnchor;jsonAnchor_1.download=this.modelJsonFileName;jsonAnchor_1.href=modelJsonURL;return[4,defer(function(){return jsonAnchor_1.dispatchEvent(new MouseEvent("click"))})];case 2:_a.sent();if(!(modelArtifacts.weightData!=null))return[3,4];weightDataAnchor_1=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;weightDataAnchor_1.download=this.weightDataFileName;weightDataAnchor_1.href=weightsURL;return[4,defer(function(){return weightDataAnchor_1.dispatchEvent(new MouseEvent("click"))})];case 3:_a.sent();_a.label=4;case 4:return[2,{modelArtifactsInfo:getModelArtifactsInfoForJSON(modelArtifacts)}]}})})};return BrowserDownloads}();BrowserDownloads.URL_SCHEME="downloads://";var BrowserFiles=function(){function BrowserFiles(files){if(files==null||files.length<1){throw new Error("When calling browserFiles, at least 1 file is required, "+("but received "+files))}this.jsonFile=files[0];this.weightsFiles=files.slice(1)}BrowserFiles.prototype.load=function(){return __awaiter(this,void 0,void 0,function(){var _this=this;return __generator(this,function(_a){return[2,new Promise(function(resolve,reject){var jsonReader=new FileReader;jsonReader.onload=function(event){var modelJSON=JSON.parse(event.target.result);var modelTopology=modelJSON.modelTopology;if(modelTopology==null){reject(new Error("modelTopology field is missing from file "+_this.jsonFile.name));return}var weightsManifest=modelJSON.weightsManifest;if(weightsManifest==null){reject(new Error("weightManifest field is missing from file "+_this.jsonFile.name));return}if(_this.weightsFiles.length===0){resolve({modelTopology:modelTopology});return}var modelArtifactsPromise=getModelArtifactsForJSON(modelJSON,function(weightsManifest){return _this.loadWeights(weightsManifest)});resolve(modelArtifactsPromise)};jsonReader.onerror=function(error){return reject("Failed to read model topology and weights manifest JSON "+("from file '"+_this.jsonFile.name+"'. BrowserFiles supports loading ")+"Keras-style tf.Model artifacts only.")};jsonReader.readAsText(_this.jsonFile)})]})})};BrowserFiles.prototype.loadWeights=function(weightsManifest){var e_1,_a;var _this=this;var weightSpecs=[];var paths=[];try{for(var weightsManifest_1=__values(weightsManifest),weightsManifest_1_1=weightsManifest_1.next();!weightsManifest_1_1.done;weightsManifest_1_1=weightsManifest_1.next()){var entry=weightsManifest_1_1.value;weightSpecs.push.apply(weightSpecs,__spread(entry.weights));paths.push.apply(paths,__spread(entry.paths))}}catch(e_1_1){e_1={error:e_1_1}}finally{try{if(weightsManifest_1_1&&!weightsManifest_1_1.done&&(_a=weightsManifest_1.return))_a.call(weightsManifest_1)}finally{if(e_1)throw e_1.error}}var pathToFile=this.checkManifestAndWeightFiles(weightsManifest);var promises=paths.map(function(path){return _this.loadWeightsFile(path,pathToFile[path])});return Promise.all(promises).then(function(buffers){return[weightSpecs,concatenateArrayBuffers(buffers)]})};BrowserFiles.prototype.loadWeightsFile=function(path,file){return new Promise(function(resolve,reject){var weightFileReader=new FileReader;weightFileReader.onload=function(event){var weightData=event.target.result;resolve(weightData)};weightFileReader.onerror=function(error){return reject("Failed to weights data from file of path '"+path+"'.")};weightFileReader.readAsArrayBuffer(file)})};BrowserFiles.prototype.checkManifestAndWeightFiles=function(manifest){var e_2,_a;var _this=this;var basenames=[];var fileNames=this.weightsFiles.map(function(file){return basename(file.name)});var pathToFile={};try{for(var manifest_1=__values(manifest),manifest_1_1=manifest_1.next();!manifest_1_1.done;manifest_1_1=manifest_1.next()){var group=manifest_1_1.value;group.paths.forEach(function(path){var pathBasename=basename(path);if(basenames.indexOf(pathBasename)!==-1){throw new Error("Duplicate file basename found in weights manifest: "+("'"+pathBasename+"'"))}basenames.push(pathBasename);if(fileNames.indexOf(pathBasename)===-1){throw new Error("Weight file with basename '"+pathBasename+"' is not provided.")}else{pathToFile[path]=_this.weightsFiles[fileNames.indexOf(pathBasename)]}})}}catch(e_2_1){e_2={error:e_2_1}}finally{try{if(manifest_1_1&&!manifest_1_1.done&&(_a=manifest_1.return))_a.call(manifest_1)}finally{if(e_2)throw e_2.error}}if(basenames.length!==this.weightsFiles.length){throw new Error("Mismatch in the number of files in weights manifest "+("("+basenames.length+") and the number of weight files provided ")+("("+this.weightsFiles.length+")."))}return pathToFile};return BrowserFiles}();var browserDownloadsRouter=function(url){if(!env().getBool("IS_BROWSER")){return null}else{if(!Array.isArray(url)&&url.startsWith(BrowserDownloads.URL_SCHEME)){return browserDownloads(url.slice(BrowserDownloads.URL_SCHEME.length))}else{return null}}};IORouterRegistry.registerSaveRouter(browserDownloadsRouter);function browserDownloads(fileNamePrefix){if(fileNamePrefix===void 0){fileNamePrefix="model"}return new BrowserDownloads(fileNamePrefix)}function browserFiles(files){return new BrowserFiles(files)}function monitorPromisesProgress(promises,onProgress,startFraction,endFraction){checkPromises(promises);startFraction=startFraction==null?0:startFraction;endFraction=endFraction==null?1:endFraction;checkFraction(startFraction,endFraction);var resolvedPromise=0;var registerMonitor=function(promise){promise.then(function(value){var fraction=startFraction+ ++resolvedPromise/promises.length*(endFraction-startFraction);onProgress(fraction);return value});return promise};function checkPromises(promises){assert(promises!=null&&Array.isArray(promises)&&promises.length>0,function(){return"promises must be a none empty array"})}function checkFraction(startFraction,endFraction){assert(startFraction>=0&&startFraction<=1,function(){return"Progress fraction must be in range [0, 1], but "+("got startFraction "+startFraction)});assert(endFraction>=0&&endFraction<=1,function(){return"Progress fraction must be in range [0, 1], but "+("got endFraction "+endFraction)});assert(endFraction>=startFraction,function(){return"startFraction must be no more than endFraction, but "+("got startFraction "+startFraction+" and endFraction ")+(""+endFraction)})}return Promise.all(promises.map(registerMonitor))}function loadWeightsAsArrayBuffer(fetchURLs,loadOptions){return __awaiter(this,void 0,void 0,function(){var fetchFunc,requests,fetchStartFraction,fetchEndFraction,responses,_a,bufferPromises,bufferStartFraction,bufferEndFraction,buffers,_b;return __generator(this,function(_c){switch(_c.label){case 0:if(loadOptions==null){loadOptions={}}fetchFunc=loadOptions.fetchFunc==null?env().platform.fetch:loadOptions.fetchFunc;requests=fetchURLs.map(function(fetchURL){return fetchFunc(fetchURL,loadOptions.requestInit,{isBinary:true})});fetchStartFraction=0;fetchEndFraction=.5;if(!(loadOptions.onProgress==null))return[3,2];return[4,Promise.all(requests)];case 1:_a=_c.sent();return[3,4];case 2:return[4,monitorPromisesProgress(requests,loadOptions.onProgress,fetchStartFraction,fetchEndFraction)];case 3:_a=_c.sent();_c.label=4;case 4:responses=_a;bufferPromises=responses.map(function(response){return response.arrayBuffer()});bufferStartFraction=.5;bufferEndFraction=1;if(!(loadOptions.onProgress==null))return[3,6];return[4,Promise.all(bufferPromises)];case 5:_b=_c.sent();return[3,8];case 6:return[4,monitorPromisesProgress(bufferPromises,loadOptions.onProgress,bufferStartFraction,bufferEndFraction)];case 7:_b=_c.sent();_c.label=8;case 8:buffers=_b;return[2,buffers]}})})}function loadWeights(manifest,filePathPrefix,weightNames,requestInit){if(filePathPrefix===void 0){filePathPrefix=""}return __awaiter(this,void 0,void 0,function(){var fetchWeights,loadWeights;return __generator(this,function(_a){fetchWeights=function(fetchUrls){return loadWeightsAsArrayBuffer(fetchUrls,{requestInit:requestInit})};loadWeights=weightsLoaderFactory(fetchWeights);return[2,loadWeights(manifest,filePathPrefix,weightNames)]})})}function weightsLoaderFactory(fetchWeightsFunction){var _this=this;return function(manifest,filePathPrefix,weightNames){if(filePathPrefix===void 0){filePathPrefix=""}return __awaiter(_this,void 0,void 0,function(){var groupIndicesToFetchMap,groupWeightsToFetch,weightsFound,allManifestWeightNames,weightsNotFound,groupIndicesToFetch,fetchUrls,buffers,weightsTensorMap,bufferIndexOffset;return __generator(this,function(_a){switch(_a.label){case 0:groupIndicesToFetchMap=manifest.map(function(){return false});groupWeightsToFetch={};weightsFound=weightNames!=null?weightNames.map(function(){return false}):[];allManifestWeightNames=[];manifest.forEach(function(manifestGroupConfig,groupIndex){var groupOffset=0;manifestGroupConfig.weights.forEach(function(weightsEntry){var rawDtype="quantization"in weightsEntry?weightsEntry.quantization.dtype:weightsEntry.dtype;var weightsBytes=DTYPE_VALUE_SIZE_MAP[rawDtype]*sizeFromShape(weightsEntry.shape);var enqueueWeightsForFetchingFn=function(){groupIndicesToFetchMap[groupIndex]=true;if(groupWeightsToFetch[groupIndex]==null){groupWeightsToFetch[groupIndex]=[]}groupWeightsToFetch[groupIndex].push({manifestEntry:weightsEntry,groupOffset:groupOffset,sizeBytes:weightsBytes})};if(weightNames!=null){weightNames.forEach(function(weightName,weightIndex){if(weightName===weightsEntry.name){enqueueWeightsForFetchingFn();weightsFound[weightIndex]=true}})}else{enqueueWeightsForFetchingFn()}allManifestWeightNames.push(weightsEntry.name);groupOffset+=weightsBytes})});if(!weightsFound.every(function(found){return found})){weightsNotFound=weightNames.filter(function(_,i){return!weightsFound[i]});throw new Error("Could not find weights in manifest with names: "+(weightsNotFound.join(", ")+". \n")+"Manifest JSON has weights with names: "+(allManifestWeightNames.join(", ")+"."))}groupIndicesToFetch=groupIndicesToFetchMap.reduce(function(accumulator,shouldFetch,i){if(shouldFetch){accumulator.push(i)}return accumulator},[]);fetchUrls=[];groupIndicesToFetch.forEach(function(i){manifest[i].paths.forEach(function(filepath){var fetchUrl=filePathPrefix+(!filePathPrefix.endsWith("/")?"/":"")+filepath;fetchUrls.push(fetchUrl)})});return[4,fetchWeightsFunction(fetchUrls)];case 1:buffers=_a.sent();weightsTensorMap={};bufferIndexOffset=0;groupIndicesToFetch.forEach(function(i){var numBuffers=manifest[i].paths.length;var groupBytes=0;for(var i_1=0;i_1<numBuffers;i_1++){groupBytes+=buffers[bufferIndexOffset+i_1].byteLength}var groupBuffer=new ArrayBuffer(groupBytes);var groupByteBuffer=new Uint8Array(groupBuffer);var groupBufferOffset=0;for(var i_2=0;i_2<numBuffers;i_2++){var buffer=new Uint8Array(buffers[bufferIndexOffset+i_2]);groupByteBuffer.set(buffer,groupBufferOffset);groupBufferOffset+=buffer.byteLength}var weightsEntries=groupWeightsToFetch[i];weightsEntries.forEach(function(weightsEntry){var byteBuffer=groupBuffer.slice(weightsEntry.groupOffset,weightsEntry.groupOffset+weightsEntry.sizeBytes);var nameToTensorMap=decodeWeights(byteBuffer,[weightsEntry.manifestEntry]);for(var name in nameToTensorMap){weightsTensorMap[name]=nameToTensorMap[name]}});bufferIndexOffset+=numBuffers});return[2,weightsTensorMap]}})})}}var OCTET_STREAM_MIME_TYPE="application/octet-stream";var JSON_TYPE="application/json";var HTTPRequest=function(){function HTTPRequest(path,loadOptions){this.DEFAULT_METHOD="POST";if(loadOptions==null){loadOptions={}}this.weightPathPrefix=loadOptions.weightPathPrefix;this.onProgress=loadOptions.onProgress;this.weightUrlConverter=loadOptions.weightUrlConverter;if(loadOptions.fetchFunc!=null){assert(typeof loadOptions.fetchFunc==="function",function(){return"Must pass a function that matches the signature of "+"`fetch` (see "+"https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"});this.fetch=loadOptions.fetchFunc}else{this.fetch=env().platform.fetch}assert(path!=null&&path.length>0,function(){return"URL path for http must not be null, undefined or "+"empty."});if(Array.isArray(path)){assert(path.length===2,function(){return"URL paths for http must have a length of 2, "+("(actual length is "+path.length+").")})}this.path=path;if(loadOptions.requestInit!=null&&loadOptions.requestInit.body!=null){throw new Error("requestInit is expected to have no pre-existing body, but has one.")}this.requestInit=loadOptions.requestInit||{}}HTTPRequest.prototype.save=function(modelArtifacts){return __awaiter(this,void 0,void 0,function(){var init,weightsManifest,modelTopologyAndWeightManifest,response;return __generator(this,function(_a){switch(_a.label){case 0:if(modelArtifacts.modelTopology instanceof ArrayBuffer){throw new Error("BrowserHTTPRequest.save() does not support saving model topology "+"in binary formats yet.")}init=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);init.body=new FormData;weightsManifest=[{paths:["./model.weights.bin"],weights:modelArtifacts.weightSpecs}];modelTopologyAndWeightManifest=getModelJSONForModelArtifacts(modelArtifacts,weightsManifest);init.body.append("model.json",new Blob([JSON.stringify(modelTopologyAndWeightManifest)],{type:JSON_TYPE}),"model.json");if(modelArtifacts.weightData!=null){init.body.append("model.weights.bin",new Blob([modelArtifacts.weightData],{type:OCTET_STREAM_MIME_TYPE}),"model.weights.bin")}return[4,this.fetch(this.path,init)];case 1:response=_a.sent();if(response.ok){return[2,{modelArtifactsInfo:getModelArtifactsInfoForJSON(modelArtifacts),responses:[response]}]}else{throw new Error("BrowserHTTPRequest.save() failed due to HTTP response status "+(response.status+"."))}}})})};HTTPRequest.prototype.load=function(){return __awaiter(this,void 0,void 0,function(){var modelConfigRequest,modelJSON,message,modelTopology,weightsManifest;var _this=this;return __generator(this,function(_a){switch(_a.label){case 0:return[4,this.fetch(this.path,this.requestInit)];case 1:modelConfigRequest=_a.sent();if(!modelConfigRequest.ok){throw new Error("Request to "+this.path+" failed with status code "+(modelConfigRequest.status+". Please verify this URL points to ")+"the model JSON of the model to load.")}_a.label=2;case 2:_a.trys.push([2,4,,5]);return[4,modelConfigRequest.json()];case 3:modelJSON=_a.sent();return[3,5];case 4:_a.sent();message="Failed to parse model JSON of response from "+this.path+".";if(this.path.endsWith(".pb")){message+=" Your path contains a .pb file extension. "+"Support for .pb models have been removed in TensorFlow.js 1.0 "+"in favor of .json models. You can re-convert your Python "+"TensorFlow model using the TensorFlow.js 1.0 conversion scripts "+"or you can convert your.pb models with the 'pb2json'"+"NPM script in the tensorflow/tfjs-converter repository."}else{message+=" Please make sure the server is serving valid "+"JSON for this request."}throw new Error(message);case 5:modelTopology=modelJSON.modelTopology;weightsManifest=modelJSON.weightsManifest;if(modelTopology==null&&weightsManifest==null){throw new Error("The JSON from HTTP path "+this.path+" contains neither model "+"topology or manifest for weights.")}return[2,getModelArtifactsForJSON(modelJSON,function(weightsManifest){return _this.loadWeights(weightsManifest)})]}})})};HTTPRequest.prototype.loadWeights=function(weightsManifest){return __awaiter(this,void 0,void 0,function(){var weightPath,_a,prefix,suffix,pathPrefix,weightSpecs,weightsManifest_1,weightsManifest_1_1,entry,fetchURLs,urlPromises,weightsManifest_2,weightsManifest_2_1,weightsGroup,_b,_c,path,_d,_e,_f,buffers;var e_2,_g,e_3,_h,e_4,_j;return __generator(this,function(_k){switch(_k.label){case 0:weightPath=Array.isArray(this.path)?this.path[1]:this.path;_a=__read(parseUrl(weightPath),2),prefix=_a[0],suffix=_a[1];pathPrefix=this.weightPathPrefix||prefix;weightSpecs=[];try{for(weightsManifest_1=__values(weightsManifest),weightsManifest_1_1=weightsManifest_1.next();!weightsManifest_1_1.done;weightsManifest_1_1=weightsManifest_1.next()){entry=weightsManifest_1_1.value;weightSpecs.push.apply(weightSpecs,__spread(entry.weights))}}catch(e_2_1){e_2={error:e_2_1}}finally{try{if(weightsManifest_1_1&&!weightsManifest_1_1.done&&(_g=weightsManifest_1.return))_g.call(weightsManifest_1)}finally{if(e_2)throw e_2.error}}fetchURLs=[];urlPromises=[];try{for(weightsManifest_2=__values(weightsManifest),weightsManifest_2_1=weightsManifest_2.next();!weightsManifest_2_1.done;weightsManifest_2_1=weightsManifest_2.next()){weightsGroup=weightsManifest_2_1.value;try{for(_b=(e_4=void 0,__values(weightsGroup.paths)),_c=_b.next();!_c.done;_c=_b.next()){path=_c.value;if(this.weightUrlConverter!=null){urlPromises.push(this.weightUrlConverter(path))}else{fetchURLs.push(pathPrefix+path+suffix)}}}catch(e_4_1){e_4={error:e_4_1}}finally{try{if(_c&&!_c.done&&(_j=_b.return))_j.call(_b)}finally{if(e_4)throw e_4.error}}}}catch(e_3_1){e_3={error:e_3_1}}finally{try{if(weightsManifest_2_1&&!weightsManifest_2_1.done&&(_h=weightsManifest_2.return))_h.call(weightsManifest_2)}finally{if(e_3)throw e_3.error}}if(!this.weightUrlConverter)return[3,2];_e=(_d=fetchURLs.push).apply;_f=[fetchURLs];return[4,Promise.all(urlPromises)];case 1:_e.apply(_d,_f.concat([__spread.apply(void 0,[_k.sent()])]));_k.label=2;case 2:return[4,loadWeightsAsArrayBuffer(fetchURLs,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress})];case 3:buffers=_k.sent();return[2,[weightSpecs,concatenateArrayBuffers(buffers)]]}})})};return HTTPRequest}();HTTPRequest.URL_SCHEME_REGEX=/^https?:\/\//;function parseUrl(url){var lastSlash=url.lastIndexOf("/");var lastSearchParam=url.lastIndexOf("?");var prefix=url.substring(0,lastSlash);var suffix=lastSearchParam>lastSlash?url.substring(lastSearchParam):"";return[prefix+"/",suffix]}function isHTTPScheme(url){return url.match(HTTPRequest.URL_SCHEME_REGEX)!=null}var httpRouter=function(url,loadOptions){if(typeof fetch==="undefined"&&(loadOptions==null||loadOptions.fetchFunc==null)){return null}else{var isHTTP=true;if(Array.isArray(url)){isHTTP=url.every(function(urlItem){return isHTTPScheme(urlItem)})}else{isHTTP=isHTTPScheme(url)}if(isHTTP){return http(url,loadOptions)}}return null};IORouterRegistry.registerSaveRouter(httpRouter);IORouterRegistry.registerLoadRouter(httpRouter);function http(path,loadOptions){return new HTTPRequest(path,loadOptions)}function browserHTTPRequest(path,loadOptions){return http(path,loadOptions)}var PassthroughLoader=function(){function PassthroughLoader(modelArtifacts){this.modelArtifacts=modelArtifacts}PassthroughLoader.prototype.load=function(){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(_a){return[2,this.modelArtifacts]})})};return PassthroughLoader}();var PassthroughSaver=function(){function PassthroughSaver(saveHandler){this.saveHandler=saveHandler}PassthroughSaver.prototype.save=function(modelArtifacts){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(_a){return[2,this.saveHandler(modelArtifacts)]})})};return PassthroughSaver}();function fromMemory(modelArtifacts,weightSpecs,weightData,trainingConfig){if(arguments.length===1){var isModelArtifacts=modelArtifacts.modelTopology!=null||modelArtifacts.weightSpecs!=null;if(isModelArtifacts){return new PassthroughLoader(modelArtifacts)}else{console.warn("Please call tf.io.fromMemory() with only one argument. "+"The argument should be of type ModelArtifacts. "+"The multi-argument signature of tf.io.fromMemory() has been "+"deprecated and will be removed in a future release.");return new PassthroughLoader({modelTopology:modelArtifacts})}}else{console.warn("Please call tf.io.fromMemory() with only one argument. "+"The argument should be of type ModelArtifacts. "+"The multi-argument signature of tf.io.fromMemory() has been "+"deprecated and will be removed in a future release.");return new PassthroughLoader({modelTopology:modelArtifacts,weightSpecs:weightSpecs,weightData:weightData,trainingConfig:trainingConfig})}}function withSaveHandler(saveHandler){return new PassthroughSaver(saveHandler)}var io={__proto__:null,browserFiles:browserFiles,browserHTTPRequest:browserHTTPRequest,concatenateArrayBuffers:concatenateArrayBuffers,decodeWeights:decodeWeights,encodeWeights:encodeWeights,fromMemory:fromMemory,getLoadHandlers:getLoadHandlers,getModelArtifactsForJSON:getModelArtifactsForJSON,getModelArtifactsInfoForJSON:getModelArtifactsInfoForJSON,getSaveHandlers:getSaveHandlers,http:http,isHTTPScheme:isHTTPScheme,loadWeights:loadWeights,registerLoadRouter:registerLoadRouter,registerSaveRouter:registerSaveRouter,weightsLoaderFactory:weightsLoaderFactory,withSaveHandler:withSaveHandler,copyModel:copyModel,listModels:listModels,moveModel:moveModel,removeModel:removeModel};function matMul_(a,b,transposeA,transposeB){var _a;if(transposeA===void 0){transposeA=false}if(transposeB===void 0){transposeB=false}var $a=convertToTensor(a,"a","matMul");var $b=convertToTensor(b,"b","matMul");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];var inputs={a:$a,b:$b};var attrs={transposeA:transposeA,transposeB:transposeB};return ENGINE.runKernel(BatchMatMul,inputs,attrs)}var matMul$1=op({matMul_:matMul_});function oneHot_(indices,depth,onValue,offValue){if(onValue===void 0){onValue=1}if(offValue===void 0){offValue=0}if(depth<2){throw new Error("Error in oneHot: depth must be >=2, but it is "+depth)}var $indices=convertToTensor(indices,"indices","oneHot","int32");var inputs={indices:$indices};var attrs={depth:depth,onValue:onValue,offValue:offValue};return ENGINE.runKernel(OneHot,inputs,attrs)}var oneHot=op({oneHot_:oneHot_});function transpose_(x,perm){var $x=convertToTensor(x,"x","transpose");if(perm==null){perm=$x.shape.map(function(s,i){return i}).reverse()}assert($x.rank===perm.length,function(){return"Error in transpose: rank of input "+$x.rank+" "+("must match length of perm "+perm+".")});perm.forEach(function(axis){assert(axis>=0&&axis<$x.rank,function(){return"All entries in 'perm' must be between 0 and "+($x.rank-1)+(" but got "+perm)})});if($x.rank<=1){return $x.clone()}var inputs={x:$x};var attrs={perm:perm};return ENGINE.runKernel(Transpose,inputs,attrs)}var transpose=op({transpose_:transpose_});function confusionMatrix_(labels,predictions,numClasses){var $labels=convertToTensor(labels,"labels","confusionMatrix");var $predictions=convertToTensor(predictions,"predictions","confusionMatrix");assert(numClasses==null||numClasses>0&&Number.isInteger(numClasses),function(){return"If provided, numClasses must be a positive integer, "+("but got "+numClasses)});assert($labels.rank===1,function(){return"Expected the rank of labels to be 1, but got "+$labels.rank});assert($predictions.rank===1,function(){return"Expected the rank of predictions to be 1, "+("but got "+$predictions.rank)});assert($labels.shape[0]===$predictions.shape[0],function(){return"Mismatch in the number of examples: "+($labels.shape[0]+" vs. "+$predictions.shape[0]+". ")+"Labels and predictions should have the same number of elements."});assert(numClasses>0&&Number.isInteger(numClasses),function(){return"numClasses is required to be a positive integer, but got "+(""+numClasses)});var oneHotLabels=oneHot(cast($labels,"int32"),numClasses);var oneHotPredictions=oneHot(cast($predictions,"int32"),numClasses);var oneHotLabelsT=transpose(oneHotLabels);var product=matMul$1(oneHotLabelsT,oneHotPredictions);return cast(product,"int32")}var confusionMatrix=op({confusionMatrix_:confusionMatrix_});var math={__proto__:null,confusionMatrix:confusionMatrix};function tensor3d(values,shape,dtype){assertNonNull(values);if(shape!=null&&shape.length!==3){throw new Error("tensor3d() requires shape to have three numbers")}var inferredShape=inferShape(values,dtype);if(inferredShape.length!==3&&inferredShape.length!==1){throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray")}if(inferredShape.length===1&&shape==null){throw new Error("tensor3d() requires shape to be provided when `values` "+"are a flat array")}return makeTensor(values,shape,inferredShape,dtype)}var fromPixels2DContext;function fromPixels_(pixels,numChannels){if(numChannels===void 0){numChannels=3}if(numChannels>4){throw new Error("Cannot construct Tensor with more than 4 channels from pixels.")}if(pixels==null){throw new Error("pixels passed to tf.browser.fromPixels() can not be null")}var isPixelData=false;var isImageData=false;var isVideo=false;var isImage=false;var isCanvasLike=false;var isImageBitmap=false;if(pixels.data instanceof Uint8Array){isPixelData=true}else if(typeof ImageData!=="undefined"&&pixels instanceof ImageData){isImageData=true}else if(typeof HTMLVideoElement!=="undefined"&&pixels instanceof HTMLVideoElement){isVideo=true}else if(typeof HTMLImageElement!=="undefined"&&pixels instanceof HTMLImageElement){isImage=true}else if(pixels.getContext!=null){isCanvasLike=true}else if(typeof ImageBitmap!=="undefined"&&pixels instanceof ImageBitmap){isImageBitmap=true}else{throw new Error("pixels passed to tf.browser.fromPixels() must be either an "+"HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData "+"in browser, or OffscreenCanvas, ImageData in webworker"+" or {data: Uint32Array, width: number, height: number}, "+("but was "+pixels.constructor.name))}if(isVideo){var HAVE_CURRENT_DATA_READY_STATE=2;if(isVideo&&pixels.readyState<HAVE_CURRENT_DATA_READY_STATE){throw new Error("The video element has not loaded data yet. Please wait for "+"`loadeddata` event on the <video> element.")}}var kernel=getKernel(FromPixels,ENGINE.backendName);if(kernel!=null){var inputs={pixels:pixels};var attrs={numChannels:numChannels};return ENGINE.runKernel(FromPixels,inputs,attrs)}var _a=__read(isVideo?[pixels.videoWidth,pixels.videoHeight]:[pixels.width,pixels.height],2),width=_a[0],height=_a[1];var vals;if(isCanvasLike){vals=pixels.getContext("2d").getImageData(0,0,width,height).data}else if(isImageData||isPixelData){vals=pixels.data}else if(isImage||isVideo||isImageBitmap){if(fromPixels2DContext==null){fromPixels2DContext=document.createElement("canvas").getContext("2d")}fromPixels2DContext.canvas.width=width;fromPixels2DContext.canvas.height=height;fromPixels2DContext.drawImage(pixels,0,0,width,height);vals=fromPixels2DContext.getImageData(0,0,width,height).data}var values;if(numChannels===4){values=new Int32Array(vals)}else{var numPixels=width*height;values=new Int32Array(numPixels*numChannels);for(var i=0;i<numPixels;i++){for(var channel=0;channel<numChannels;++channel){values[i*numChannels+channel]=vals[i*4+channel]}}}var outShape=[height,width,numChannels];return tensor3d(values,outShape,"int32")}function isPixelData(pixels){return pixels!=null&&pixels.data instanceof Uint8Array}function isImageBitmapFullySupported(){return typeof window!=="undefined"&&typeof ImageBitmap!=="undefined"&&window.hasOwnProperty("createImageBitmap")}function isNonEmptyPixels(pixels){return pixels!=null&&pixels.width!==0&&pixels.height!==0}function canWrapPixelsToImageBitmap(pixels){return isImageBitmapFullySupported()&&!(pixels instanceof ImageBitmap)&&isNonEmptyPixels(pixels)&&!isPixelData(pixels)}function fromPixelsAsync(pixels,numChannels){if(numChannels===void 0){numChannels=3}return __awaiter(this,void 0,void 0,function(){var inputs,imageBitmap;return __generator(this,function(_a){switch(_a.label){case 0:inputs=null;if(!(env().getBool("WRAP_TO_IMAGEBITMAP")&&canWrapPixelsToImageBitmap(pixels)))return[3,5];imageBitmap=void 0;_a.label=1;case 1:_a.trys.push([1,3,,4]);return[4,createImageBitmap(pixels,{premultiplyAlpha:"none"})];case 2:imageBitmap=_a.sent();return[3,4];case 3:_a.sent();imageBitmap=null;return[3,4];case 4:if(imageBitmap!=null&&imageBitmap.width===pixels.width&&imageBitmap.height===pixels.height){inputs=imageBitmap}else{inputs=pixels}return[3,6];case 5:inputs=pixels;_a.label=6;case 6:return[2,fromPixels_(inputs,numChannels)]}})})}function toPixels(img,canvas){return __awaiter(this,void 0,void 0,function(){var $img,originalImgTensor,_a,height,width,depth,data,multiplier,bytes,i,rgba,d,value,j,ctx,imageData;return __generator(this,function(_b){switch(_b.label){case 0:$img=convertToTensor(img,"img","toPixels");if(!(img instanceof Tensor)){originalImgTensor=$img;$img=cast(originalImgTensor,"int32");originalImgTensor.dispose()}if($img.rank!==2&&$img.rank!==3){throw new Error("toPixels only supports rank 2 or 3 tensors, got rank "+$img.rank+".")}_a=__read($img.shape.slice(0,2),2),height=_a[0],width=_a[1];depth=$img.rank===2?1:$img.shape[2];if(depth>4||depth===2){throw new Error("toPixels only supports depth of size "+("1, 3 or 4 but got "+depth))}if($img.dtype!=="float32"&&$img.dtype!=="int32"){throw new Error("Unsupported type for toPixels: "+$img.dtype+"."+" Please use float32 or int32 tensors.")}return[4,$img.data()];case 1:data=_b.sent();multiplier=$img.dtype==="float32"?255:1;bytes=new Uint8ClampedArray(width*height*4);for(i=0;i<height*width;++i){rgba=[0,0,0,255];for(d=0;d<depth;d++){value=data[i*depth+d];if($img.dtype==="float32"){if(value<0||value>1){throw new Error("Tensor values for a float32 Tensor must be in the "+("range [0 - 1] but encountered "+value+"."))}}else if($img.dtype==="int32"){if(value<0||value>255){throw new Error("Tensor values for a int32 Tensor must be in the "+("range [0 - 255] but encountered "+value+"."))}}if(depth===1){rgba[0]=value*multiplier;rgba[1]=value*multiplier;rgba[2]=value*multiplier}else{rgba[d]=value*multiplier}}j=i*4;bytes[j+0]=Math.round(rgba[0]);bytes[j+1]=Math.round(rgba[1]);bytes[j+2]=Math.round(rgba[2]);bytes[j+3]=Math.round(rgba[3])}if(canvas!=null){canvas.width=width;canvas.height=height;ctx=canvas.getContext("2d");imageData=new ImageData(bytes,width,height);ctx.putImageData(imageData,0,0)}if($img!==img){$img.dispose()}return[2,bytes]}})})}var fromPixels=op({fromPixels_:fromPixels_});var browser={__proto__:null,fromPixelsAsync:fromPixelsAsync,toPixels:toPixels,fromPixels:fromPixels};function prepareAndValidate(tensor,indices){var tensorRank=tensor.shape.length;var indicesRank=indices.shape.length;if(tensorRank<1){throw new Error("tf.gatherND() expects the input to be rank 1 or higher,"+(" but the rank was "+tensorRank+"."))}if(indicesRank<1){throw new Error("tf.gatherND() expects the indices to be rank 1 or higher,"+(" but the rank was "+indicesRank+"."))}if(indices.dtype!=="int32"){throw new Error("tf.gatherND() expects the indices to be int32 type,"+(" but the dtype was "+indices.dtype+"."))}if(indices.shape[indicesRank-1]>tensorRank){throw new Error("index innermost dimension length must be <= tensor rank; saw: "+(indices.shape[indicesRank-1]+" vs. "+tensorRank))}if(sizeFromShape(tensor.shape)===0){throw new Error("Requested more than 0 entries, but input is empty."+(" Input shape: "+tensor.shape+"."))}var indicesShape=indices.shape;var sliceRank=indicesShape[indicesShape.length-1];var nResult=1;for(var i=0;i<indicesShape.length-1;++i){nResult*=indicesShape[i]}var inputShape=tensor.shape;var resultShape=indicesShape.slice();resultShape.pop();var sliceSize=1;for(var i=sliceRank;i<tensorRank;++i){sliceSize*=inputShape[i];resultShape.push(inputShape[i])}var strides=__spread(computeStrides(tensor.shape).map(function(stride){return stride/sliceSize}),[1]).slice(0,sliceRank);return[resultShape,nResult,sliceSize,strides]}var gather_nd_util={__proto__:null,prepareAndValidate:prepareAndValidate};function validateUpdateShape(shape,indices,updates){var sliceDim=indices.rank>1?indices.shape[indices.rank-1]:1;var batchDim=indices.rank>1?indices.rank-1:1;var shapeError="Must have updates.shape = indices.shape[:batchDim] + "+("shape[sliceDim:], got updates.shape: "+updates.shape)+(", indices.shape: "+indices.shape+", shape: "+shape)+(", sliceDim: "+sliceDim+", and batchDim: "+batchDim+".");if(updates.rank<batchDim){throw new Error(shapeError+(" update.rank < "+batchDim+". "))}if(shape.length<sliceDim+(updates.rank-batchDim)){throw new Error(shapeError+(" Output shape length < "+(sliceDim+(updates.rank-batchDim))))}if(updates.rank!==batchDim+shape.length-sliceDim){throw new Error(shapeError+(" update.rank != "+(batchDim+shape.length-sliceDim)))}for(var d=0;d<batchDim;++d){if(updates.shape[d]!==indices.shape[d]){throw new Error(shapeError+(" updates.shape["+d+"] ("+updates.shape[d]+") != indices.shape["+d+"] ("+indices.shape[d]+")."))}}for(var d=0;d<updates.rank-batchDim;++d){if(updates.shape[d+batchDim]!==shape[d+sliceDim]){throw new Error(shapeError+(" updates.shape["+(d+batchDim)+"] ("+updates.shape[d+batchDim]+") != shape["+(d+batchDim)+"] ("+shape[d+batchDim]+")"))}}}function validateInput$1(updates,indices,shape){if(indices.rank<1){throw new Error("tf.scatterND() expects the indices to be rank 1 or higher,"+(" but the rank was "+indices.rank+"."))}if(updates.rank<1){throw new Error("tf.scatterND() expects the updates to be rank 1 or higher,"+(" but the rank was "+updates.rank+"."))}if(indices.dtype!=="int32"){throw new Error("The dtype of 'indices' should be int32, but got dtype: "+indices.dtype)}if(shape.length<1){throw new Error("Output rank must be greater or equal to 1, but got shape: "+shape)}if(shape.length===0){if(indices.size===0){throw new Error("Indices specified for empty output. indices shape: "+indices.shape)}if(updates.size===0){throw new Error("Updates specified for empty output. updates shape: "+updates.shape)}}validateUpdateShape(shape,indices,updates)}function calculateShapes(updates,indices,shape){var indicesRank=indices.shape.length;var sliceRank=indicesRank>1?indices.shape[indicesRank-1]:1;var totalNd=shape.length;var sliceSize=1;for(var i=sliceRank;i<totalNd;++i){sliceSize*=shape[i]}var safeSliceDim=sliceRank<1?1:sliceRank;var numUpdates=sizeFromShape(indices.shape)/safeSliceDim;var strides=__spread(computeStrides(shape.slice(0,sliceRank)),[1]);var outputSize=sizeFromShape(shape);return{sliceRank:sliceRank,numUpdates:numUpdates,sliceSize:sliceSize,strides:strides,outputSize:outputSize}}var scatter_nd_util={__proto__:null,validateUpdateShape:validateUpdateShape,validateInput:validateInput$1,calculateShapes:calculateShapes};function assertParamsValid(input,begin,size){var inputRank=input.shape.length;assert(inputRank===begin.length,function(){return"Error in slice"+inputRank+"D: Length of begin "+begin+" must "+("match the rank of the array ("+inputRank+").")});assert(inputRank===size.length,function(){return"Error in slice"+inputRank+"D: Length of size "+size+" must "+("match the rank of the array ("+inputRank+").")});var _loop_1=function(i){assert(begin[i]+size[i]<=input.shape[i],function(){return"Error in slice"+inputRank+"D: begin["+i+"] + size["+i+"] "+("("+(begin[i]+size[i])+") would overflow input.shape["+i+"] ("+input.shape[i]+")")})};for(var i=0;i<inputRank;++i){_loop_1(i)}}function maskToAxes(mask){var axes=[];var axis=0;while(mask>0){if(mask&1){axes.push(axis)}mask/=2;axis++}return axes}function computeOutShape$2(begin,end,strides){var size=[];for(var axis=0;axis<begin.length;axis++){size[axis]=Math.ceil((end[axis]-begin[axis])/strides[axis])}return size}function stridesWithElidedDims(strides,ellipsisInsertionIndex,numElidedAxes,inputShape){var newStrides=__spread(strides);for(var i=newStrides.length;i<inputShape.length;i++){newStrides.push(1)}for(var i=0;i<numElidedAxes;i++){if(i===0){newStrides[ellipsisInsertionIndex]=1}else{newStrides.splice(ellipsisInsertionIndex,0,1);newStrides.pop()}}return newStrides}function unnormalizeAxis(ellipsisInsertionIndex,numElidedAxes,normalizedAxis){if(normalizedAxis<=ellipsisInsertionIndex){return normalizedAxis}return normalizedAxis-(numElidedAxes-1)}function getElidedAxes(numElidedAxes,ellipsisInsertionIndex){var elidedAxes=[];for(var i=0;i<numElidedAxes;i++){elidedAxes.push(ellipsisInsertionIndex+i)}return elidedAxes}function getNormalizedAxes(inputShape,ellipsisAxes,numInterpolatedAxes,begin,end,strides,beginMask,endMask,ellipsisMask){var inputRank=inputShape.length;var normalizedBegin=new Array(inputRank),normalizedEnd=new Array(inputRank),normalizedStrides=new Array(inputRank);if(ellipsisAxes.length&&numInterpolatedAxes>0){var fullIndex=ellipsisAxes[0];var numElidedAxes=numInterpolatedAxes+1;normalizedBegin=startIndicesWithElidedDims(beginMask,fullIndex,numElidedAxes,begin,inputShape);normalizedEnd=stopIndicesWithElidedDims(endMask,fullIndex,numElidedAxes,end,inputShape);normalizedStrides=stridesWithElidedDims(strides,fullIndex,numElidedAxes,inputShape)}else{for(var axis=0;axis<inputRank;axis++){normalizedBegin[axis]=startForAxis(beginMask,begin,strides,inputShape,axis,ellipsisMask);normalizedEnd[axis]=stopForAxis(endMask,end,strides,inputShape,axis,ellipsisMask);normalizedStrides[axis]=stridesForAxis(strides,axis,ellipsisMask)}}return{begin:normalizedBegin,end:normalizedEnd,strides:normalizedStrides}}function startIndicesWithElidedDims(beginMask,ellipsisInsertionIndex,numElidedAxes,originalBegin,inputShape){var newIndices=__spread(inputShape);var elidedAxes=getElidedAxes(numElidedAxes,ellipsisInsertionIndex);for(var axis=0;axis<newIndices.length;axis++){if(elidedAxes.indexOf(axis)>-1){newIndices[axis]=0}else{var originalAxis=unnormalizeAxis(ellipsisInsertionIndex,numElidedAxes,axis);var originalValue=originalBegin[originalAxis];if(beginMask&1<<originalAxis){originalValue=0}newIndices[axis]=originalValue}}return newIndices}function stopIndicesWithElidedDims(endMask,ellipsisInsertionIndex,numElidedAxes,originalEnd,inputShape){var newIndices=__spread(inputShape);var elidedAxes=getElidedAxes(numElidedAxes,ellipsisInsertionIndex);for(var axis=0;axis<newIndices.length;axis++){if(elidedAxes.indexOf(axis)>-1){newIndices[axis]=Number.MAX_SAFE_INTEGER}else{var originalAxis=unnormalizeAxis(ellipsisInsertionIndex,numElidedAxes,axis);var originalValue=originalEnd[originalAxis];if(endMask&1<<originalAxis){originalValue=Number.MAX_SAFE_INTEGER}newIndices[axis]=originalValue}}for(var i=0;i<newIndices.length;i++){var axisSize=inputShape[i];if(newIndices[i]<0){newIndices[i]+=axisSize}newIndices[i]=clamp(0,newIndices[i],inputShape[i])}return newIndices}function stridesForAxis(strides,axis,ellipsisMask){var stride=strides[axis];if(ellipsisMask&1<<axis||stride==null){stride=1}return stride}function startForAxis(beginMask,startIndices,strides,inputShape,axis,ellipsisMask){var start=startIndices[axis];var stride=strides[axis]||1;if(beginMask&1<<axis||ellipsisMask&1<<axis||start==null){if(stride>0){start=Number.MIN_SAFE_INTEGER}else{start=Number.MAX_SAFE_INTEGER}}var axisSize=inputShape[axis];if(start<0){start+=axisSize}start=clamp(0,start,axisSize-1);return start}function stopForAxis(endMask,stopIndices,strides,inputShape,axis,ellipsisMask){var stop=stopIndices[axis];var stride=strides[axis]||1;if(endMask&1<<axis||ellipsisMask&1<<axis||stop==null){if(stride>0){stop=Number.MAX_SAFE_INTEGER}else{stop=Number.MIN_SAFE_INTEGER}}var axisSize=inputShape[axis];if(stop<0){stop+=axisSize}if(stride>0){stop=clamp(0,stop,axisSize)}else{stop=clamp(-1,stop,axisSize-1)}return stop}function isSliceContinous(shape,begin,size){var firstNonOneAxis=size.length;for(var i=0;i<size.length;i++){if(size[i]>1){firstNonOneAxis=i;break}}for(var i=firstNonOneAxis+1;i<size.length;i++){if(begin[i]>0||size[i]!==shape[i]){return false}}return true}function computeFlatOffset(begin,strides){var flatOffset=begin.length>0?begin[begin.length-1]:1;for(var i=0;i<begin.length-1;i++){flatOffset+=begin[i]*strides[i]}return flatOffset}function parseSliceParams(x,begin,size){var begin_;var xRank=x.shape.length;if(typeof begin==="number"){begin_=__spread([begin],new Array(xRank-1).fill(0))}else if(begin.length<xRank){begin_=begin.concat(new Array(xRank-begin.length).fill(0))}else{begin_=begin.slice()}begin_.forEach(function(d){assert(d!==-1,function(){return"slice() does not support negative begin indexing."})});var size_;if(size==null){size_=new Array(xRank).fill(-1)}else if(typeof size==="number"){size_=__spread([size],new Array(xRank-1).fill(-1))}else if(size.length<xRank){size_=size.concat(new Array(xRank-size.length).fill(-1))}else{size_=size}size_=size_.map(function(d,i){if(d>=0){return d}else{assert(d===-1,function(){return"Negative size values should be exactly -1 but got "+(d+" for the slice() size at index "+i+".")});return x.shape[i]-begin_[i]}});return[begin_,size_]}function sliceInfo(xShape,begin,end,strides,beginMask,endMask,ellipsisMask,newAxisMask,shrinkAxisMask){var $begin=begin.slice();var $end=end.slice();var $strides=strides;if(strides==null){$strides=new Array($begin.length)}var ellipsisAxes=maskToAxes(ellipsisMask);if(ellipsisAxes.length>1){throw new Error("Multiple ellipses in slice is not allowed.")}if(ellipsisMask!==0&&newAxisMask!==0){throw new Error("Using both ellipsisMask and newAxisMask is not yet supported.")}if(ellipsisMask!==0&&shrinkAxisMask!==0){throw new Error("Using both ellipsisMask and shrinkAxisMask is not yet supported.")}var numInterpolatedAxes=xShape.length-$begin.length;var expandAxes=maskToAxes(newAxisMask);var newShape=xShape.slice();expandAxes.forEach(function(axis){$begin[axis]=0;$end[axis]=1;newShape.splice(axis,0,1)});var _a=getNormalizedAxes(newShape,ellipsisAxes,numInterpolatedAxes,$begin,$end,$strides,beginMask,endMask,ellipsisMask),normalizedBegin=_a.begin,normalizedEnd=_a.end,normalizedStrides=_a.strides;$begin=normalizedBegin;$end=normalizedEnd;$strides=normalizedStrides;var shrinkAxes=maskToAxes(shrinkAxisMask);shrinkAxes.forEach(function(axis){$end[axis]=$begin[axis]+1;$strides[axis]=1});var size=computeOutShape$2($begin,$end,$strides);var outShape=size.filter(function(_,axis){return shrinkAxes.indexOf(axis)===-1});var nonStrided=$strides.every(function(v){return v===1});return{nonStrided:nonStrided,$begin:$begin,$end:$end,$strides:$strides,size:size,newShape:newShape,outShape:outShape}}var slice_util={__proto__:null,assertParamsValid:assertParamsValid,maskToAxes:maskToAxes,computeOutShape:computeOutShape$2,stridesWithElidedDims:stridesWithElidedDims,getNormalizedAxes:getNormalizedAxes,startIndicesWithElidedDims:startIndicesWithElidedDims,stopIndicesWithElidedDims:stopIndicesWithElidedDims,stridesForAxis:stridesForAxis,startForAxis:startForAxis,stopForAxis:stopForAxis,isSliceContinous:isSliceContinous,computeFlatOffset:computeFlatOffset,parseSliceParams:parseSliceParams,sliceInfo:sliceInfo};var Serializable=function(){function Serializable(){}Serializable.prototype.getClassName=function(){return this.constructor.className};Serializable.fromConfig=function(cls,config){return new cls(config)};return Serializable}();var SerializationMap=function(){function SerializationMap(){this.classNameMap={}}SerializationMap.getMap=function(){if(SerializationMap.instance==null){SerializationMap.instance=new SerializationMap}return SerializationMap.instance};SerializationMap.register=function(cls){SerializationMap.getMap().classNameMap[cls.className]=[cls,cls.fromConfig]};return SerializationMap}();function registerClass(cls){assert(cls.className!=null,function(){return"Class being registered does not have the static className "+"property defined."});assert(typeof cls.className==="string",function(){return"className is required to be a string, but got type "+typeof cls.className});assert(cls.className.length>0,function(){return"Class being registered has an empty-string as its className, "+"which is disallowed."});SerializationMap.register(cls)}var serialization={__proto__:null,Serializable:Serializable,SerializationMap:SerializationMap,registerClass:registerClass};var TEST_EPSILON_FLOAT32=.001;var TEST_EPSILON_FLOAT16=.1;function expectArraysClose(actual,expected,epsilon){if(epsilon==null){epsilon=testEpsilon()}return expectArraysPredicate(actual,expected,function(a,b){return areClose(a,b,epsilon)})}function testEpsilon(){return ENGINE.backend.floatPrecision()===32?TEST_EPSILON_FLOAT32:TEST_EPSILON_FLOAT16}function expectArraysPredicate(actual,expected,predicate){var checkClassType=true;if(isTypedArray(actual)||isTypedArray(expected)){checkClassType=false}if(isTypedArray(actual)&&isTypedArray(expected)){checkClassType=true}if(checkClassType){var aType=actual.constructor.name;var bType=expected.constructor.name;if(aType!==bType){throw new Error("Arrays are of different type. Actual: "+aType+". "+("Expected: "+bType))}}if(Array.isArray(actual)&&Array.isArray(expected)){var actualShape=inferShape(actual);var expectedShape=inferShape(expected);if(!arraysEqual(actualShape,expectedShape)){throw new Error("Arrays have different shapes. "+("Actual: ["+actualShape+"]. Expected: ["+expectedShape+"]"))}}var actualFlat=isTypedArray(actual)?actual:flatten(actual);var expectedFlat=isTypedArray(expected)?expected:flatten(expected);if(actualFlat.length!==expectedFlat.length){throw new Error("Arrays have different lengths actual: "+actualFlat.length+" vs "+("expected: "+expectedFlat.length+".\n")+("Actual:   "+actualFlat+".\n")+("Expected: "+expectedFlat+"."))}for(var i=0;i<expectedFlat.length;++i){var a=actualFlat[i];var e=expectedFlat[i];if(!predicate(a,e)){throw new Error("Arrays differ: actual["+i+"] = "+a+", expected["+i+"] = "+e+".\n"+("Actual:   "+actualFlat+".\n")+("Expected: "+expectedFlat+"."))}}}function expectPromiseToFail(fn,done){fn().then(function(){return done.fail()},function(){return done()})}function expectArraysEqual(actual,expected){var exp=typeof expected==="string"||typeof expected==="number"||typeof expected==="boolean"?[expected]:expected;if(isString(actual)||isString(actual[0])||isString(expected)||isString(expected[0])){return expectArraysPredicate(actual,exp,function(a,b){return a==b})}return expectArraysPredicate(actual,expected,function(a,b){return areClose(a,b,0)})}function expectNumbersClose(a,e,epsilon){if(epsilon==null){epsilon=testEpsilon()}if(!areClose(a,e,epsilon)){throw new Error("Numbers differ: actual === "+a+", expected === "+e)}}function areClose(a,e,epsilon){if(!isFinite(a)&&!isFinite(e)){return true}if(isNaN(a)||isNaN(e)||Math.abs(a-e)>epsilon){return false}return true}function expectValuesInRange(actual,low,high){for(var i=0;i<actual.length;i++){if(actual[i]<low||actual[i]>high){throw new Error("Value out of range:"+actual[i]+" low: "+low+", high: "+high)}}}function expectArrayBuffersEqual(actual,expected){expect(new Float32Array(actual)).toEqual(new Float32Array(expected))}function encodeStrings(a){for(var i=0;i<a.length;i++){var val=a[i];if(Array.isArray(val)){encodeStrings(val)}else{a[i]=encodeString(val)}}return a}var test_util={__proto__:null,TEST_EPSILON_FLOAT16:TEST_EPSILON_FLOAT16,expectArraysClose:expectArraysClose,testEpsilon:testEpsilon,expectPromiseToFail:expectPromiseToFail,expectArraysEqual:expectArraysEqual,expectNumbersClose:expectNumbersClose,expectValuesInRange:expectValuesInRange,expectArrayBuffersEqual:expectArrayBuffersEqual,encodeStrings:encodeStrings};var version="3.10.0";function enableProdMode(){env().set("PROD",true)}function enableDebugMode(){env().set("DEBUG",true)}function disableDeprecationWarnings(){env().set("DEPRECATION_WARNINGS_ENABLED",false);console.warn("TensorFlow.js deprecation warnings have been disabled.")}function deprecationWarn(msg){if(env().getBool("DEPRECATION_WARNINGS_ENABLED")){console.warn(msg+" You can disable deprecation warnings with "+"tf.disableDeprecationWarnings().")}}function disposeVariables(){ENGINE.disposeVariables()}function engine(){return ENGINE}function memory(){return ENGINE.memory()}function profile(f){return ENGINE.profile(f)}function tidy(nameOrFn,fn){return ENGINE.tidy(nameOrFn,fn)}function dispose(container){var tensors=getTensorsInContainer(container);tensors.forEach(function(tensor){return tensor.dispose()})}function keep(result){return ENGINE.keep(result)}function time(f){return ENGINE.time(f)}function setBackend(backendName){return ENGINE.setBackend(backendName)}function ready(){return ENGINE.ready()}function getBackend(){return ENGINE.backendName}function removeBackend(name){ENGINE.removeBackend(name)}function findBackend(name){return ENGINE.findBackend(name)}function findBackendFactory(name){return ENGINE.findBackendFactory(name)}function registerBackend(name,factory,priority){if(priority===void 0){priority=1}return ENGINE.registerBackend(name,factory,priority)}function backend(){return ENGINE.backend}function setPlatform(platformName,platform){env().setPlatform(platformName,platform)}function add_(a,b){var _a;var $a=convertToTensor(a,"a","add");var $b=convertToTensor(b,"b","add");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];var inputs={a:$a,b:$b};return ENGINE.runKernel(Add,inputs)}var add=op({add_:add_});function floorDiv_(a,b){var _a;var $a=convertToTensor(a,"a","floorDiv");var $b=convertToTensor(b,"b","floorDiv");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];var inputs={a:$a,b:$b};return ENGINE.runKernel(FloorDiv,inputs)}var floorDiv=op({floorDiv_:floorDiv_});function div_(a,b){var _a;var $a=convertToTensor(a,"a","div");var $b=convertToTensor(b,"b","div");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];if($a.dtype==="int32"&&$b.dtype==="int32"){return floorDiv($a,$b)}var inputs={a:$a,b:$b};var attrs={};return ENGINE.runKernel(RealDiv,inputs,attrs)}var div=op({div_:div_});function mul_(a,b){var _a;var $a=convertToTensor(a,"a","mul");var $b=convertToTensor(b,"b","mul");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];var inputs={a:$a,b:$b};return ENGINE.runKernel(Multiply,inputs)}var mul=op({mul_:mul_});function abs_(x){var $x=convertToTensor(x,"x","abs");if($x.dtype==="complex64"){var inputs={x:$x};return ENGINE.runKernel(ComplexAbs,inputs)}else{var inputs={x:$x};return ENGINE.runKernel(Abs,inputs)}}var abs=op({abs_:abs_});function acos_(x){var $x=convertToTensor(x,"x","acos");var inputs={x:$x};return ENGINE.runKernel(Acos,inputs)}var acos=op({acos_:acos_});function acosh_(x){var $x=convertToTensor(x,"x","acosh");var inputs={x:$x};return ENGINE.runKernel(Acosh,inputs)}var acosh=op({acosh_:acosh_});function addN_(tensors){assert(Array.isArray(tensors),function(){return"The argument passed to tf.addN() must be a list of tensors"});assert(tensors.length>=1,function(){return"Must pass at least one tensor to tf.addN(), but got "+(""+tensors.length)});var $tensors=tensors.map(function(t,i){return convertToTensor(t,"tensors"+i,"addN")});var firstTensor=$tensors[0];$tensors.forEach(function(t){if(t.dtype!==firstTensor.dtype){throw new Error("All tensors passed to tf.addN() must have the same dtype")}});$tensors.forEach(function(t){if(!arraysEqual(t.shape,firstTensor.shape)){throw new Error("All tensors passed to tf.addN() must have the same shape")}});var inputs=$tensors;return ENGINE.runKernel(AddN,inputs)}var addN=op({addN_:addN_});function all_(x,axis,keepDims){if(axis===void 0){axis=null}if(keepDims===void 0){keepDims=false}var $x=convertToTensor(x,"x","all","bool");var inputs={x:$x};var attrs={axis:axis,keepDims:keepDims};return ENGINE.runKernel(All,inputs,attrs)}var all=op({all_:all_});function any_(x,axis,keepDims){if(axis===void 0){axis=null}if(keepDims===void 0){keepDims=false}var $x=convertToTensor(x,"x","any","bool");var inputs={x:$x};var attrs={axis:axis,keepDims:keepDims};return ENGINE.runKernel(Any,inputs,attrs)}var any=op({any_:any_});function argMax_(x,axis){if(axis===void 0){axis=0}var $x=convertToTensor(x,"x","argMax");var inputs={x:$x};var attrs={axis:axis};return ENGINE.runKernel(ArgMax,inputs,attrs)}var argMax=op({argMax_:argMax_});function argMin_(x,axis){if(axis===void 0){axis=0}var $x=convertToTensor(x,"x","argMin");var inputs={x:$x};var attrs={axis:axis};return ENGINE.runKernel(ArgMin,inputs,attrs)}var argMin=op({argMin_:argMin_});function asin_(x){var $x=convertToTensor(x,"x","asin");var inputs={x:$x};return ENGINE.runKernel(Asin,inputs)}var asin=op({asin_:asin_});function asinh_(x){var $x=convertToTensor(x,"x","asinh");var inputs={x:$x};return ENGINE.runKernel(Asinh,inputs)}var asinh=op({asinh_:asinh_});function atan_(x){var $x=convertToTensor(x,"x","atan");var inputs={x:$x};return ENGINE.runKernel(Atan,inputs)}var atan=op({atan_:atan_});function atan2_(a,b){var _a;var $a=convertToTensor(a,"a","atan2");var $b=convertToTensor(b,"b","atan2");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];var inputs={a:$a,b:$b};return ENGINE.runKernel(Atan2,inputs)}var atan2=op({atan2_:atan2_});function atanh_(x){var $x=convertToTensor(x,"x","atanh");var inputs={x:$x};return ENGINE.runKernel(Atanh,inputs)}var atanh=op({atanh_:atanh_});function computeDilation2DInfo(inputShape,filterShape,strides,pad,dataFormat,dilations){if(dataFormat===void 0){dataFormat="NHWC"}var inputChannels=inputShape[3];var $filterShape=__spread(filterShape,[inputChannels]);var $dataFormat=convertConv2DDataFormat(dataFormat);return computeConv2DInfo(inputShape,$filterShape,strides,dilations,pad,null,null,$dataFormat)}function computePool2DInfo(inShape,filterSize,strides,dilations,pad,roundingMode,dataFormat){if(dataFormat===void 0){dataFormat="channelsLast"}var _a=__read(parseTupleParam(filterSize),2),filterHeight=_a[0],filterWidth=_a[1];var filterShape;if(dataFormat==="channelsLast"){filterShape=[filterHeight,filterWidth,inShape[3],inShape[3]]}else if(dataFormat==="channelsFirst"){filterShape=[filterHeight,filterWidth,inShape[1],inShape[1]]}else{throw new Error("Unknown dataFormat "+dataFormat)}return computeConv2DInfo(inShape,filterShape,strides,dilations,pad,roundingMode,false,dataFormat)}function computePool3DInfo(inShape,filterSize,strides,dilations,pad,roundingMode,dataFormat){if(dataFormat===void 0){dataFormat="NDHWC"}var _a=__read(parse3TupleParam(filterSize),3),filterDepth=_a[0],filterHeight=_a[1],filterWidth=_a[2];var filterShape;var $dataFormat;if(dataFormat==="NDHWC"){$dataFormat="channelsLast";filterShape=[filterDepth,filterHeight,filterWidth,inShape[4],inShape[4]]}else if(dataFormat==="NCDHW"){$dataFormat="channelsFirst";filterShape=[filterDepth,filterHeight,filterWidth,inShape[1],inShape[1]]}else{throw new Error("Unknown dataFormat "+dataFormat)}return computeConv3DInfo(inShape,filterShape,strides,dilations,pad,false,$dataFormat,roundingMode)}function computeConv2DInfo(inShape,filterShape,strides,dilations,pad,roundingMode,depthwise,dataFormat){var _a,_b;if(depthwise===void 0){depthwise=false}if(dataFormat===void 0){dataFormat="channelsLast"}var _c=__read([-1,-1,-1,-1],4),batchSize=_c[0],inHeight=_c[1],inWidth=_c[2],inChannels=_c[3];if(dataFormat==="channelsLast"){_a=__read(inShape,4),batchSize=_a[0],inHeight=_a[1],inWidth=_a[2],inChannels=_a[3]}else if(dataFormat==="channelsFirst"){_b=__read(inShape,4),batchSize=_b[0],inChannels=_b[1],inHeight=_b[2],inWidth=_b[3]}else{throw new Error("Unknown dataFormat "+dataFormat)}var _d=__read(filterShape,4),filterHeight=_d[0],filterWidth=_d[1],filterChannels=_d[3];var _e=__read(parseTupleParam(strides),2),strideHeight=_e[0],strideWidth=_e[1];var _f=__read(parseTupleParam(dilations),2),dilationHeight=_f[0],dilationWidth=_f[1];var effectiveFilterHeight=getEffectiveFilterSize(filterHeight,dilationHeight);var effectiveFilterWidth=getEffectiveFilterSize(filterWidth,dilationWidth);var _g=getPadAndOutInfo(pad,inHeight,inWidth,strideHeight,strideWidth,effectiveFilterHeight,effectiveFilterWidth,roundingMode,dataFormat),padInfo=_g.padInfo,outHeight=_g.outHeight,outWidth=_g.outWidth;var outChannels=depthwise?filterChannels*inChannels:filterChannels;var outShape;if(dataFormat==="channelsFirst"){outShape=[batchSize,outChannels,outHeight,outWidth]}else if(dataFormat==="channelsLast"){outShape=[batchSize,outHeight,outWidth,outChannels]}return{batchSize:batchSize,dataFormat:dataFormat,inHeight:inHeight,inWidth:inWidth,inChannels:inChannels,outHeight:outHeight,outWidth:outWidth,outChannels:outChannels,padInfo:padInfo,strideHeight:strideHeight,strideWidth:strideWidth,filterHeight:filterHeight,filterWidth:filterWidth,effectiveFilterHeight:effectiveFilterHeight,effectiveFilterWidth:effectiveFilterWidth,dilationHeight:dilationHeight,dilationWidth:dilationWidth,inShape:inShape,outShape:outShape,filterShape:filterShape}}function computeConv3DInfo(inShape,filterShape,strides,dilations,pad,depthwise,dataFormat,roundingMode){var _a,_b;if(depthwise===void 0){depthwise=false}if(dataFormat===void 0){dataFormat="channelsLast"}var _c=__read([-1,-1,-1,-1,-1],5),batchSize=_c[0],inDepth=_c[1],inHeight=_c[2],inWidth=_c[3],inChannels=_c[4];if(dataFormat==="channelsLast"){_a=__read(inShape,5),batchSize=_a[0],inDepth=_a[1],inHeight=_a[2],inWidth=_a[3],inChannels=_a[4]}else if(dataFormat==="channelsFirst"){_b=__read(inShape,5),batchSize=_b[0],inChannels=_b[1],inDepth=_b[2],inHeight=_b[3],inWidth=_b[4]}else{throw new Error("Unknown dataFormat "+dataFormat)}var _d=__read(filterShape,5),filterDepth=_d[0],filterHeight=_d[1],filterWidth=_d[2],filterChannels=_d[4];var _e=__read(parse3TupleParam(strides),3),strideDepth=_e[0],strideHeight=_e[1],strideWidth=_e[2];var _f=__read(parse3TupleParam(dilations),3),dilationDepth=_f[0],dilationHeight=_f[1],dilationWidth=_f[2];var effectiveFilterDepth=getEffectiveFilterSize(filterDepth,dilationDepth);var effectiveFilterHeight=getEffectiveFilterSize(filterHeight,dilationHeight);var effectiveFilterWidth=getEffectiveFilterSize(filterWidth,dilationWidth);var _g=get3DPadAndOutInfo(pad,inDepth,inHeight,inWidth,strideDepth,strideHeight,strideWidth,effectiveFilterDepth,effectiveFilterHeight,effectiveFilterWidth,roundingMode),padInfo=_g.padInfo,outDepth=_g.outDepth,outHeight=_g.outHeight,outWidth=_g.outWidth;var outChannels=depthwise?filterChannels*inChannels:filterChannels;var outShape;if(dataFormat==="channelsFirst"){outShape=[batchSize,outChannels,outDepth,outHeight,outWidth]}else if(dataFormat==="channelsLast"){outShape=[batchSize,outDepth,outHeight,outWidth,outChannels]}return{batchSize:batchSize,dataFormat:dataFormat,inDepth:inDepth,inHeight:inHeight,inWidth:inWidth,inChannels:inChannels,outDepth:outDepth,outHeight:outHeight,outWidth:outWidth,outChannels:outChannels,padInfo:padInfo,strideDepth:strideDepth,strideHeight:strideHeight,strideWidth:strideWidth,filterDepth:filterDepth,filterHeight:filterHeight,filterWidth:filterWidth,effectiveFilterDepth:effectiveFilterDepth,effectiveFilterHeight:effectiveFilterHeight,effectiveFilterWidth:effectiveFilterWidth,dilationDepth:dilationDepth,dilationHeight:dilationHeight,dilationWidth:dilationWidth,inShape:inShape,outShape:outShape,filterShape:filterShape}}function computeOutputShape2D(inShape,fieldSize,stride,zeroPad,roundingMode){if(zeroPad==null){zeroPad=computeDefaultPad(inShape,fieldSize,stride)}var inputRows=inShape[0];var inputCols=inShape[1];var outputRows=round$1((inputRows-fieldSize+2*zeroPad)/stride+1,roundingMode);var outputCols=round$1((inputCols-fieldSize+2*zeroPad)/stride+1,roundingMode);return[outputRows,outputCols]}function computeOutputShape4D(inShape,fieldSize,outChannels,stride,zeroPad,roundingMode){if(zeroPad==null){zeroPad=computeDefaultPad(inShape,fieldSize,stride)}var inputDepth=inShape[0];var inputRows=inShape[1];var inputCols=inShape[2];var outputDepths=round$1((inputDepth-fieldSize+2*zeroPad)/stride+1,roundingMode);var outputRows=round$1((inputRows-fieldSize+2*zeroPad)/stride+1,roundingMode);var outputCols=round$1((inputCols-fieldSize+2*zeroPad)/stride+1,roundingMode);return[outputDepths,outputRows,outputCols,outChannels]}function computeDefaultPad(inputShape,fieldSize,stride,dilation){if(dilation===void 0){dilation=1}var effectiveFieldSize=getEffectiveFilterSize(fieldSize,dilation);return Math.floor((inputShape[0]*(stride-1)-stride+effectiveFieldSize)/2)}function parseTupleParam(param){if(typeof param==="number"){return[param,param,param]}if(param.length===2){return[param[0],param[1],1]}return param}function parse3TupleParam(param){return typeof param==="number"?[param,param,param]:param}function getEffectiveFilterSize(filterSize,dilation){if(dilation<=1){return filterSize}return filterSize+(filterSize-1)*(dilation-1)}function getPadAndOutInfo(pad,inHeight,inWidth,strideHeight,strideWidth,filterHeight,filterWidth,roundingMode,dataFormat){var padInfo;var outHeight;var outWidth;if(typeof pad==="number"){var padType=pad===0?"VALID":"NUMBER";padInfo={top:pad,bottom:pad,left:pad,right:pad,type:padType};var outShape=computeOutputShape2D([inHeight,inWidth],filterHeight,strideHeight,pad,roundingMode);outHeight=outShape[0];outWidth=outShape[1]}else if(pad==="same"){outHeight=Math.ceil(inHeight/strideHeight);outWidth=Math.ceil(inWidth/strideWidth);var padAlongHeight=Math.max(0,(outHeight-1)*strideHeight+filterHeight-inHeight);var padAlongWidth=Math.max(0,(outWidth-1)*strideWidth+filterWidth-inWidth);var top=Math.floor(padAlongHeight/2);var bottom=padAlongHeight-top;var left=Math.floor(padAlongWidth/2);var right=padAlongWidth-left;padInfo={top:top,bottom:bottom,left:left,right:right,type:"SAME"}}else if(pad==="valid"){padInfo={top:0,bottom:0,left:0,right:0,type:"VALID"};outHeight=Math.ceil((inHeight-filterHeight+1)/strideHeight);outWidth=Math.ceil((inWidth-filterWidth+1)/strideWidth)}else if(typeof pad==="object"){var top=dataFormat==="channelsLast"?pad[1][0]:pad[2][0];var bottom=dataFormat==="channelsLast"?pad[1][1]:pad[2][1];var left=dataFormat==="channelsLast"?pad[2][0]:pad[3][0];var right=dataFormat==="channelsLast"?pad[2][1]:pad[3][1];var padType=top===0&&bottom===0&&left===0&&right===0?"VALID":"EXPLICIT";padInfo={top:top,bottom:bottom,left:left,right:right,type:padType};outHeight=round$1((inHeight-filterHeight+top+bottom)/strideHeight+1,roundingMode);outWidth=round$1((inWidth-filterWidth+left+right)/strideWidth+1,roundingMode)}else{throw Error("Unknown padding parameter: "+pad)}return{padInfo:padInfo,outHeight:outHeight,outWidth:outWidth}}function get3DPadAndOutInfo(pad,inDepth,inHeight,inWidth,strideDepth,strideHeight,strideWidth,filterDepth,filterHeight,filterWidth,roundingMode){var padInfo;var outDepth;var outHeight;var outWidth;if(typeof pad==="number"){var padType=pad===0?"VALID":"NUMBER";padInfo={top:pad,bottom:pad,left:pad,right:pad,front:pad,back:pad,type:padType};var outShape=computeOutputShape4D([inDepth,inHeight,inWidth,1],filterDepth,1,strideDepth,pad,roundingMode);outDepth=outShape[0];outHeight=outShape[1];outWidth=outShape[2]}else if(pad==="same"){outDepth=Math.ceil(inDepth/strideDepth);outHeight=Math.ceil(inHeight/strideHeight);outWidth=Math.ceil(inWidth/strideWidth);var padAlongDepth=(outDepth-1)*strideDepth+filterDepth-inDepth;var padAlongHeight=(outHeight-1)*strideHeight+filterHeight-inHeight;var padAlongWidth=(outWidth-1)*strideWidth+filterWidth-inWidth;var front=Math.floor(padAlongDepth/2);var back=padAlongDepth-front;var top=Math.floor(padAlongHeight/2);var bottom=padAlongHeight-top;var left=Math.floor(padAlongWidth/2);var right=padAlongWidth-left;padInfo={top:top,bottom:bottom,left:left,right:right,front:front,back:back,type:"SAME"}}else if(pad==="valid"){padInfo={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"};outDepth=Math.ceil((inDepth-filterDepth+1)/strideDepth);outHeight=Math.ceil((inHeight-filterHeight+1)/strideHeight);outWidth=Math.ceil((inWidth-filterWidth+1)/strideWidth)}else{throw Error("Unknown padding parameter: "+pad)}return{padInfo:padInfo,outDepth:outDepth,outHeight:outHeight,outWidth:outWidth}}function round$1(value,roundingMode){if(!roundingMode){return Math.trunc(value)}switch(roundingMode){case"round":return Math.round(value);case"ceil":return Math.ceil(value);case"floor":return Math.floor(value);default:throw new Error("Unknown roundingMode "+roundingMode)}}function tupleValuesAreOne(param){var _a=__read(parseTupleParam(param),3),dimA=_a[0],dimB=_a[1],dimC=_a[2];return dimA===1&&dimB===1&&dimC===1}function eitherStridesOrDilationsAreOne(strides,dilations){return tupleValuesAreOne(strides)||tupleValuesAreOne(dilations)}function convertConv2DDataFormat(dataFormat){if(dataFormat==="NHWC"){return"channelsLast"}else if(dataFormat==="NCHW"){return"channelsFirst"}else{throw new Error("Unknown dataFormat "+dataFormat)}}function reshape_(x,shape){var $x=convertToTensor(x,"x","reshape","string_or_numeric");var inputs={x:$x};var attrs={shape:shape};return ENGINE.runKernel(Reshape,inputs,attrs)}var reshape=op({reshape_:reshape_});function avgPool_(x,filterSize,strides,pad,dimRoundingMode){var $x=convertToTensor(x,"x","avgPool","float32");var dilations=1;assert(eitherStridesOrDilationsAreOne(strides,dilations),function(){return"Error in avgPool: Either strides or dilations must be 1. "+("Got strides "+strides+" and dilations '"+dilations+"'")});var x4D=$x;var reshapedTo4D=false;if($x.rank===3){reshapedTo4D=true;x4D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2]])}assert(x4D.rank===4,function(){return"Error in avgPool: x must be rank 4 but got rank "+x4D.rank+"."});if(dimRoundingMode!=null){assert(isInt(pad),function(){return"Error in avgPool: pad must be an integer when using, "+("dimRoundingMode "+dimRoundingMode+" but got pad "+pad+".")})}var inputs={x:x4D};var attrs={filterSize:filterSize,strides:strides,pad:pad,dimRoundingMode:dimRoundingMode};var res=ENGINE.runKernel(AvgPool,inputs,attrs);res=cast(res,$x.dtype);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return res}var avgPool=op({avgPool_:avgPool_});function avgPool3d_(x,filterSize,strides,pad,dimRoundingMode,dataFormat){if(dataFormat===void 0){dataFormat="NDHWC"}var $x=convertToTensor(x,"x","avgPool3d","float32");var x5D=$x;var reshapedTo5D=false;if($x.rank===4){reshapedTo5D=true;x5D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2],$x.shape[3]])}assert(x5D.rank===5,function(){return"Error in avgPool3d: x must be rank 5 but got rank "+x5D.rank+"."});assert(dataFormat==="NDHWC",function(){return"Error in avgPool3d: Only NDHWC is currently supported, "+("but got dataFormat of "+dataFormat)});if(dimRoundingMode!=null){assert(isInt(pad),function(){return"Error in avgPool3d: pad must be an integer when using, "+("dimRoundingMode "+dimRoundingMode+" but got pad "+pad+".")})}var inputs={x:x5D};var attrs={filterSize:filterSize,strides:strides,pad:pad,dimRoundingMode:dimRoundingMode,dataFormat:dataFormat};var res=ENGINE.runKernel(AvgPool3D,inputs,attrs);res=cast(res,x5D.dtype);if(reshapedTo5D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3],res.shape[4]])}return res}var avgPool3d=op({avgPool3d_:avgPool3d_});function concat_(tensors,axis){if(axis===void 0){axis=0}assert(tensors.length>=1,function(){return"Pass at least one tensor to concat"});var $tensors=convertToTensorArray(tensors,"tensors","concat","string_or_numeric");if($tensors[0].dtype==="complex64"){$tensors.forEach(function(tensor){if(tensor.dtype!=="complex64"){throw new Error("Cannot concatenate complex64 tensors with a tensor\n          with dtype "+tensor.dtype+". ")}})}if($tensors.length===1){return clone($tensors[0])}var inputs=$tensors;var attr={axis:axis};return ENGINE.runKernel(Concat,inputs,attr)}var concat=op({concat_:concat_});function sigmoid_(x){var $x=convertToTensor(x,"x","sigmoid","float32");var inputs={x:$x};return ENGINE.runKernel(Sigmoid,inputs)}var sigmoid=op({sigmoid_:sigmoid_});function slice_(x,begin,size){var $x=convertToTensor(x,"x","slice","string_or_numeric");if($x.rank===0){throw new Error("Slicing scalar is not possible")}var inputs={x:$x};var attrs={begin:begin,size:size};return ENGINE.runKernel(Slice,inputs,attrs)}var slice=op({slice_:slice_});function tanh_(x){var $x=convertToTensor(x,"x","tanh","float32");var inputs={x:$x};return ENGINE.runKernel(Tanh,inputs)}var tanh=op({tanh_:tanh_});function basicLSTMCell_(forgetBias,lstmKernel,lstmBias,data,c,h){var $forgetBias=convertToTensor(forgetBias,"forgetBias","basicLSTMCell");var $lstmKernel=convertToTensor(lstmKernel,"lstmKernel","basicLSTMCell");var $lstmBias=convertToTensor(lstmBias,"lstmBias","basicLSTMCell");var $data=convertToTensor(data,"data","basicLSTMCell");var $c=convertToTensor(c,"c","basicLSTMCell");var $h=convertToTensor(h,"h","basicLSTMCell");var combined=concat([$data,$h],1);var weighted=matMul$1(combined,$lstmKernel);var res=add(weighted,$lstmBias);var batchSize=res.shape[0];var sliceCols=res.shape[1]/4;var sliceSize=[batchSize,sliceCols];var i=slice(res,[0,0],sliceSize);var j=slice(res,[0,sliceCols],sliceSize);var f=slice(res,[0,sliceCols*2],sliceSize);var o=slice(res,[0,sliceCols*3],sliceSize);var newC=add(mul(sigmoid(i),tanh(j)),mul($c,sigmoid(add($forgetBias,f))));var newH=mul(tanh(newC),sigmoid(o));return[newC,newH]}var basicLSTMCell=op({basicLSTMCell_:basicLSTMCell_});function batchToSpaceND_(x,blockShape,crops){var $x=convertToTensor(x,"x","batchToSpaceND");var prod=blockShape.reduce(function(a,b){return a*b});assert($x.rank>=1+blockShape.length,function(){return"input rank is "+$x.rank+" but should be > than blockShape.length "+blockShape.length});assert(crops.length===blockShape.length,function(){return"crops.length is "+crops.length+" but should be equal to blockShape.length  "+blockShape.length});assert($x.shape[0]%prod===0,function(){return"input tensor batch is "+$x.shape[0]+" but is not divisible by the product of "+("the elements of blockShape "+blockShape.join(" * ")+" === "+prod)});var inputs={x:$x};var attrs={blockShape:blockShape,crops:crops};return ENGINE.runKernel(BatchToSpaceND,inputs,attrs)}var batchToSpaceND=op({batchToSpaceND_:batchToSpaceND_});function xAs4D(x){var x4D;if(x.rank===0||x.rank===1){x4D=reshape(x,[1,1,1,x.size])}else if(x.rank===2){x4D=reshape(x,[1,1,x.shape[0],x.shape[1]])}else if(x.rank===3){x4D=reshape(x,[1,x.shape[0],x.shape[1],x.shape[2]])}else{x4D=x}return x4D}function batchNorm_(x,mean,variance,offset,scale,varianceEpsilon){if(varianceEpsilon==null){varianceEpsilon=.001}var $x=convertToTensor(x,"x","batchNorm");var $mean=convertToTensor(mean,"mean","batchNorm");var $variance=convertToTensor(variance,"variance","batchNorm");var $scale;if(scale!=null){$scale=convertToTensor(scale,"scale","batchNorm")}var $offset;if(offset!=null){$offset=convertToTensor(offset,"offset","batchNorm")}assert($mean.rank===$variance.rank,function(){return"Batch normalization gradient requires mean and variance to have "+"equal ranks."});assert($offset==null||$mean.rank===$offset.rank,function(){return"Batch normalization gradient requires mean and offset to have "+"equal ranks."});assert($scale==null||$mean.rank===$scale.rank,function(){return"Batch normalization gradient requires mean and scale to have "+"equal ranks."});var x4D=xAs4D($x);var inputs={x:x4D,scale:$scale,offset:$offset,mean:$mean,variance:$variance};var attrs={varianceEpsilon:varianceEpsilon};var res=ENGINE.runKernel(FusedBatchNorm,inputs,attrs);return reshape(res,$x.shape)}var batchNorm=op({batchNorm_:batchNorm_});function batchNorm2d_(x,mean,variance,offset,scale,varianceEpsilon){var $x=convertToTensor(x,"x","batchNorm");var $mean=convertToTensor(mean,"mean","batchNorm");var $variance=convertToTensor(variance,"variance","batchNorm");var $scale;if(scale!=null){$scale=convertToTensor(scale,"scale","batchNorm")}var $offset;if(offset!=null){$offset=convertToTensor(offset,"offset","batchNorm")}assert($x.rank===2,function(){return"Error in batchNorm2D: x must be rank 2 but got rank "+($x.rank+".")});assert($mean.rank===2||$mean.rank===1,function(){return"Error in batchNorm2D: mean must be rank 2 or rank 1 but "+("got rank "+$mean.rank+".")});assert($variance.rank===2||$variance.rank===1,function(){return"Error in batchNorm2D: variance must be rank 2 or rank 1 "+("but got rank "+$variance.rank+".")});if($scale!=null){assert($scale.rank===2||$scale.rank===1,function(){return"Error in batchNorm2D: scale must be rank 2 or rank 1 "+("but got rank "+$scale.rank+".")})}if($offset!=null){assert($offset.rank===2||$offset.rank===1,function(){return"Error in batchNorm2D: offset must be rank 2 or rank 1 "+("but got rank "+$offset.rank+".")})}return batchNorm($x,$mean,$variance,$offset,$scale,varianceEpsilon)}var batchNorm2d=op({batchNorm2d_:batchNorm2d_});function batchNorm3d_(x,mean,variance,offset,scale,varianceEpsilon){var $x=convertToTensor(x,"x","batchNorm");var $mean=convertToTensor(mean,"mean","batchNorm");var $variance=convertToTensor(variance,"variance","batchNorm");var $scale;if(scale!=null){$scale=convertToTensor(scale,"scale","batchNorm")}var $offset;if(offset!=null){$offset=convertToTensor(offset,"offset","batchNorm")}assert($x.rank===3,function(){return"Error in batchNorm3D: x must be rank 3 but got rank "+($x.rank+".")});assert($mean.rank===3||$mean.rank===1,function(){return"Error in batchNorm3D: mean must be rank 3 or rank 1 but "+("got rank "+$mean.rank+".")});assert($variance.rank===3||$variance.rank===1,function(){return"Error in batchNorm3D: variance must be rank 3 or rank 1 "+("but got rank "+$variance.rank+".")});if($scale!=null){assert($scale.rank===3||$scale.rank===1,function(){return"Error in batchNorm3D: scale must be rank 3 or rank 1 "+("but got rank "+$scale.rank+".")})}if($offset!=null){assert($offset.rank===3||$offset.rank===1,function(){return"Error in batchNorm3D: offset must be rank 3 or rank 1 "+("but got rank "+$offset.rank+".")})}return batchNorm($x,$mean,$variance,$offset,$scale,varianceEpsilon)}var batchNorm3d=op({batchNorm3d_:batchNorm3d_});function batchNorm4d_(x,mean,variance,offset,scale,varianceEpsilon){var $x=convertToTensor(x,"x","batchNorm");var $mean=convertToTensor(mean,"mean","batchNorm");var $variance=convertToTensor(variance,"variance","batchNorm");var $scale;if(scale!=null){$scale=convertToTensor(scale,"scale","batchNorm")}var $offset;if(offset!=null){$offset=convertToTensor(offset,"offset","batchNorm")}assert($x.rank===4,function(){return"Error in batchNorm4D: x must be rank 4 but got rank "+($x.rank+".")});assert($mean.rank===4||$mean.rank===1,function(){return"Error in batchNorm4D: mean must be rank 4 or rank 1 but "+("got rank "+$mean.rank+".")});assert($variance.rank===4||$variance.rank===1,function(){return"Error in batchNorm4D: variance must be rank 4 or rank 1 "+("but got rank "+$variance.rank+".")});if($scale!=null){assert($scale.rank===4||$scale.rank===1,function(){return"Error in batchNorm4D: scale must be rank 4 or rank 1 "+("but got rank "+$scale.rank+".")})}if($offset!=null){assert($offset.rank===4||$offset.rank===1,function(){return"Error in batchNorm4D: offset must be rank 4 or rank 1 "+("but got rank "+$offset.rank+".")})}return batchNorm($x,$mean,$variance,$offset,$scale,varianceEpsilon)}var batchNorm4d=op({batchNorm4d_:batchNorm4d_});function bincount_(x,weights,size){var $x=convertToTensor(x,"x","bincount");var $weights=convertToTensor(weights,"weights","bincount");assert($x.dtype==="int32",function(){return"Error in bincount: input "+("dtype must be int32, but got "+$x.dtype)});assert(size>=0,function(){return"size must be non-negative, but got "+size+"."});assert($weights.size===$x.size||$weights.size===0,function(){return"Error in bincount: weights must have the same size as input or"+("0-length, but got input shape: "+$x.shape+", weights shape: ")+($weights.shape+".")});var inputs={x:$x,weights:$weights};var attrs={size:size};return ENGINE.runKernel(Bincount,inputs,attrs)}var bincount=op({bincount_:bincount_});function broadcastArgs_(s0,s1){var shape1Input=convertToTensor(s0,"s0","broadcastArgs","int32");var shape2Input=convertToTensor(s1,"s1","broadcastArgs","int32");if(shape1Input.rank!==1){throw new Error("broadcastArgs(): first input must be a vector (rank=1). "+("Has rank "+shape1Input.rank))}if(shape2Input.rank!==1){throw new Error("broadcastArgs(): second input must be a vector (rank=1). "+("Has rank "+shape2Input.rank))}var inputs={s0:shape1Input,s1:shape2Input};return ENGINE.runKernel(BroadcastArgs,inputs)}var broadcastArgs=op({broadcastArgs_:broadcastArgs_});function broadcastTo_(x,shape){var input=convertToTensor(x,"broadcastTo","x");var xShape=input.shape;if(shape.some(function(d){return!(d>0)||d%1!==0})){throw new Error("broadcastTo(): Invalid broadcast shape ["+shape+"].")}if(shape.length<input.rank){throw new Error("broadcastTo(): shape.length="+shape.length+" < input.rank="+input.rank+".")}if(shape.length>input.rank){var newShape=input.shape.slice();while(newShape.length<shape.length){newShape.unshift(1)}input=reshape(input,newShape)}var inputShape=input.shape;var reps=Array.from(shape);for(var i=shape.length-1;i>=0;i--){if(inputShape[i]===shape[i]){reps[i]=1}else if(input.shape[i]!==1){throw new Error("broadcastTo(): ["+xShape+"] cannot be broadcast to ["+shape+"].")}}var axes=reps.map(function(n,i){return n>1?i:-1}).filter(function(i){return i>=0});if(axes.length===0){return clone(input)}var inputs={x:input};var attrs={reps:reps};return ENGINE.runKernel(Tile,inputs,attrs)}var broadcastTo=op({broadcastTo_:broadcastTo_});function ceil_(x){var $x=convertToTensor(x,"x","ceil","float32");var inputs={x:$x};return ENGINE.runKernel(Ceil,inputs)}var ceil=op({ceil_:ceil_});function clipByValue_(x,clipValueMin,clipValueMax){var $x=convertToTensor(x,"x","clipByValue");assert(clipValueMin<=clipValueMax,function(){return"Error in clip: min ("+clipValueMin+") must be "+("less than or equal to max ("+clipValueMax+").")});var inputs={x:$x};var attrs={clipValueMin:clipValueMin,clipValueMax:clipValueMax};return ENGINE.runKernel(ClipByValue,inputs,attrs)}var clipByValue=op({clipByValue_:clipByValue_});function concat1d_(tensors){return concat(tensors,0)}var concat1d=op({concat1d_:concat1d_});function concat2d_(tensors,axis){return concat(tensors,axis)}var concat2d=op({concat2d_:concat2d_});function concat3d_(tensors,axis){return concat(tensors,axis)}var concat3d=op({concat3d_:concat3d_});function concat4d_(tensors,axis){return concat(tensors,axis)}var concat4d=op({concat4d_:concat4d_});function conv2d_(x,filter,strides,pad,dataFormat,dilations,dimRoundingMode){if(dataFormat===void 0){dataFormat="NHWC"}if(dilations===void 0){dilations=[1,1]}var $x=convertToTensor(x,"x","conv2d","float32");var $filter=convertToTensor(filter,"filter","conv2d","float32");var x4D=$x;var reshapedTo4D=false;if($x.rank===3){reshapedTo4D=true;x4D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2]])}assert(x4D.rank===4,function(){return"Error in conv2d: input must be rank 4, but got rank "+x4D.rank+"."});assert($filter.rank===4,function(){return"Error in conv2d: filter must be rank 4, but got rank "+($filter.rank+".")});if(dimRoundingMode!=null){assert(isInt(pad),function(){return"Error in conv2d: pad must be an integer when using, "+("dimRoundingMode "+dimRoundingMode+" but got pad "+pad+".")})}var inDepth=dataFormat==="NHWC"?x4D.shape[3]:x4D.shape[1];assert(inDepth===$filter.shape[2],function(){return"Error in conv2d: depth of input ("+inDepth+") must match "+("input depth for filter "+$filter.shape[2]+".")});assert(eitherStridesOrDilationsAreOne(strides,dilations),function(){return"Error in conv2D: Either strides or dilations must be 1. "+("Got strides "+strides+" and dilations '"+dilations+"'")});var inputs={x:x4D,filter:$filter};var attrs={strides:strides,pad:pad,dataFormat:dataFormat,dilations:dilations,dimRoundingMode:dimRoundingMode};var res=ENGINE.runKernel(Conv2D,inputs,attrs);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return res}var conv2d$1=op({conv2d_:conv2d_});function conv1d_(x,filter,stride,pad,dataFormat,dilation,dimRoundingMode){if(dataFormat===void 0){dataFormat="NWC"}if(dilation===void 0){dilation=1}var $x=convertToTensor(x,"x","conv1d");var $filter=convertToTensor(filter,"filter","conv1d");var x3D=$x;var reshapedTo3D=false;if($x.rank===2){reshapedTo3D=true;x3D=reshape($x,[1,$x.shape[0],$x.shape[1]])}assert(x3D.rank===3,function(){return"Error in conv1d: input must be rank 3, but got rank "+x3D.rank+"."});assert($filter.rank===3,function(){return"Error in conv1d: filter must be rank 3, but got rank "+($filter.rank+".")});if(dimRoundingMode!=null){assert(isInt(pad),function(){return"Error in conv1d: pad must be an integer when using, "+("dimRoundingMode "+dimRoundingMode+" but got pad "+pad+".")})}assert(x3D.shape[2]===$filter.shape[1],function(){return"Error in conv1d: depth of input ("+x3D.shape[2]+") must match "+("input depth for filter "+$filter.shape[1]+".")});assert(eitherStridesOrDilationsAreOne(stride,dilation),function(){return"Error in conv1D: Either stride or dilation must be 1. "+("Got stride "+stride+" and dilation '"+dilation+"'")});assert(dataFormat==="NWC",function(){return"Error in conv1d: got dataFormat of "+dataFormat+" but only NWC is currently supported."});var filter4D=reshape($filter,[1,$filter.shape[0],$filter.shape[1],$filter.shape[2]]);var input4D=reshape(x3D,[x3D.shape[0],1,x3D.shape[1],x3D.shape[2]]);var strides=[1,stride];var dilations=[1,dilation];var conv2dDataFormat="NHWC";var res=conv2d$1(input4D,filter4D,strides,pad,conv2dDataFormat,dilations,dimRoundingMode);if(reshapedTo3D){return reshape(res,[res.shape[2],res.shape[3]])}return reshape(res,[res.shape[0],res.shape[2],res.shape[3]])}var conv1d=op({conv1d_:conv1d_});function conv2DBackpropInput_(xShape,dy,filter,strides,pad,dataFormat,dimRoundingMode){if(dataFormat===void 0){dataFormat="NHWC"}assert(xShape.length===dy.rank,function(){return"Length of inShape "+("("+xShape.length+") and rank of dy ("+dy.rank+") must match")});var xShape4D=xShape;var dy4D=dy;var reshapedTo4D=false;if(dy.rank===3){reshapedTo4D=true;dy4D=reshape(dy,[1,dy.shape[0],dy.shape[1],dy.shape[2]]);xShape4D=[1,xShape[0],xShape[1],xShape[2]]}assert(xShape4D.length===4,function(){return"Error in conv2dDerInput: inShape must be length 4, but got length "+(xShape4D.length+".")});assert(dy4D.rank===4,function(){return"Error in conv2dDerInput: dy must be rank 4, but got "+("rank "+dy4D.rank)});assert(filter.rank===4,function(){return"Error in conv2dDerInput: filter must be rank 4, but got "+("rank "+filter.rank)});var inDepth=dataFormat==="NHWC"?xShape4D[3]:xShape4D[1];var outDepth=dataFormat==="NHWC"?dy4D.shape[3]:dy4D.shape[1];assert(inDepth===filter.shape[2],function(){return"Error in conv2dDerInput: depth of input ("+inDepth+") must "+("match input depth for filter "+filter.shape[2]+".")});assert(outDepth===filter.shape[3],function(){return"Error in conv2dDerInput: depth of output ("+outDepth+") must "+("match output depth for filter "+filter.shape[3]+".")});if(dimRoundingMode!=null){assert(isInt(pad),function(){return"Error in conv2dDerInput: pad must be an integer when using, "+("dimRoundingMode "+dimRoundingMode+" but got pad "+pad+".")})}var inputs={dy:dy4D,filter:filter};var attrs={strides:strides,pad:pad,dataFormat:dataFormat,dimRoundingMode:dimRoundingMode,inputShape:xShape4D};var res=ENGINE.runKernel(Conv2DBackpropInput,inputs,attrs);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return res}var conv2DBackpropInput=op({conv2DBackpropInput_:conv2DBackpropInput_});function conv2dTranspose_(x,filter,outputShape,strides,pad,dimRoundingMode){var $x=convertToTensor(x,"x","conv2dTranspose");var $filter=convertToTensor(filter,"filter","conv2dTranspose");return conv2DBackpropInput(outputShape,$x,$filter,strides,pad,"NHWC",dimRoundingMode)}var conv2dTranspose=op({conv2dTranspose_:conv2dTranspose_});function conv3d_(x,filter,strides,pad,dataFormat,dilations){if(dataFormat===void 0){dataFormat="NDHWC"}if(dilations===void 0){dilations=[1,1,1]}var $x=convertToTensor(x,"x","conv3d");var $filter=convertToTensor(filter,"filter","conv3d");var x5D=$x;var reshapedTo5D=false;if($x.rank===4){reshapedTo5D=true;x5D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2],$x.shape[3]])}assert(x5D.rank===5,function(){return"Error in conv3d: input must be rank 5, but got rank "+x5D.rank+"."});assert($filter.rank===5,function(){return"Error in conv3d: filter must be rank 5, but got rank "+($filter.rank+".")});assert(x5D.shape[4]===$filter.shape[3],function(){return"Error in conv3d: depth of input ("+x5D.shape[4]+") must match "+("input depth for filter "+$filter.shape[3]+".")});assert(eitherStridesOrDilationsAreOne(strides,dilations),function(){return"Error in conv3D: Either strides or dilations must be 1. "+("Got strides "+strides+" and dilations '"+dilations+"'")});assert(dataFormat==="NDHWC",function(){return"Error in conv3d: got dataFormat of "+dataFormat+" but only NDHWC is currently supported."});var inputs={x:x5D,filter:$filter};var attrs={strides:strides,pad:pad,dataFormat:dataFormat,dilations:dilations};var res=ENGINE.runKernel(Conv3D,inputs,attrs);if(reshapedTo5D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3],res.shape[4]])}return res}var conv3d=op({conv3d_:conv3d_});function conv3DBackpropInput_(xShape,dy,filter,strides,pad){assert(xShape.length===dy.rank,function(){return"Length of inShape "+("("+xShape.length+") and rank of dy ("+dy.rank+") must match")});var xShape5D=xShape;var dy5D=dy;var reshapedTo5D=false;if(dy.rank===4){reshapedTo5D=true;dy5D=reshape(dy,[1,dy.shape[0],dy.shape[1],dy.shape[2],dy.shape[3]]);xShape5D=[1,xShape[0],xShape[1],xShape[2],xShape[3]]}var inDepth=xShape5D[4];var outDepth=dy5D.shape[4];assert(xShape5D.length===5,function(){return"Error in conv3dDerInput: inShape must be length 5, but got length "+(xShape5D.length+".")});assert(dy5D.rank===5,function(){return"Error in conv3dDerInput: dy must be rank 5, but got "+("rank "+dy5D.rank)});assert(filter.rank===5,function(){return"Error in conv3dDerInput: filter must be rank 5, but got "+("rank "+filter.rank)});assert(inDepth===filter.shape[3],function(){return"Error in conv3dDerInput: depth of input ("+inDepth+") must "+("match input depth for filter "+filter.shape[3]+".")});assert(outDepth===filter.shape[4],function(){return"Error in conv3dDerInput: depth of output ("+outDepth+") must "+("match output depth for filter "+filter.shape[4]+".")});var inputs={dy:dy5D,filter:filter};var attrs={pad:pad,strides:strides,inputShape:xShape5D};var res=ENGINE.runKernel(Conv3DBackpropInputV2,inputs,attrs);if(reshapedTo5D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3],res.shape[4]])}return res}var conv3DBackpropInput=op({conv3DBackpropInput_:conv3DBackpropInput_});function conv3dTranspose_(x,filter,outputShape,strides,pad){var $x=convertToTensor(x,"x","conv3dTranspose");var $filter=convertToTensor(filter,"filter","conv3dTranspose");return conv3DBackpropInput(outputShape,$x,$filter,strides,pad)}var conv3dTranspose=op({conv3dTranspose_:conv3dTranspose_});function cos_(x){var $x=convertToTensor(x,"x","cos","float32");var inputs={x:$x};return ENGINE.runKernel(Cos,inputs)}var cos=op({cos_:cos_});function cosh_(x){var $x=convertToTensor(x,"x","cosh","float32");var inputs={x:$x};return ENGINE.runKernel(Cosh,inputs)}var cosh=op({cosh_:cosh_});function cumsum_(x,axis,exclusive,reverse){if(axis===void 0){axis=0}if(exclusive===void 0){exclusive=false}if(reverse===void 0){reverse=false}var $x=convertToTensor(x,"x","cumsum");var inputs={x:$x};var attrs={axis:axis,exclusive:exclusive,reverse:reverse};return ENGINE.runKernel(Cumsum,inputs,attrs)}var cumsum=op({cumsum_:cumsum_});function denseBincount_(x,weights,size,binaryOutput){if(binaryOutput===void 0){binaryOutput=false}var $x=convertToTensor(x,"x","denseBincount");var $weights=convertToTensor(weights,"weights","denseBincount");assert($x.dtype==="int32",function(){return"Error in denseBincount: input "+("dtype must be int32, but got "+$x.dtype)});assert($x.rank<=2,function(){return"Error in denseBincount: input must be at most rank 2, but got "+("rank "+$x.rank+".")});assert(size>=0,function(){return"size must be non-negative, but got "+size+"."});assert($weights.size===$x.size||$weights.size===0,function(){return"Error in denseBincount: weights must have the same shape as x or "+("0-length, but got x shape: "+$x.shape+", weights shape: ")+($weights.shape+".")});var inputs={x:$x,weights:$weights};var attrs={size:size,binaryOutput:binaryOutput};return ENGINE.runKernel(DenseBincount,inputs,attrs)}var denseBincount=op({denseBincount_:denseBincount_});function depthToSpace_(x,blockSize,dataFormat){if(dataFormat===void 0){dataFormat="NHWC"}var $x=convertToTensor(x,"x","depthToSpace","float32");var inputHeight=dataFormat==="NHWC"?$x.shape[1]:$x.shape[2];var inputWidth=dataFormat==="NHWC"?$x.shape[2]:$x.shape[3];var inputDepth=dataFormat==="NHWC"?$x.shape[3]:$x.shape[1];assert(blockSize>1,function(){return"blockSize should be > 1 for depthToSpace, but was: "+blockSize});assert(inputHeight*blockSize>=0,function(){return"Negative dimension size caused by overflow when multiplying\n    "+inputHeight+" and "+blockSize+"  for depthToSpace with input shape\n    "+$x.shape});assert(inputWidth*blockSize>=0,function(){return"Negative dimension size caused by overflow when multiplying\n    "+inputWidth+" and "+blockSize+" for depthToSpace with input shape\n        "+$x.shape});assert(inputDepth%(blockSize*blockSize)===0,function(){return"Dimension size must be evenly divisible by "+blockSize*blockSize+" but is "+inputDepth+" for depthToSpace with input shape "+$x.shape});var inputs={x:$x};var attrs={blockSize:blockSize,dataFormat:dataFormat};return ENGINE.runKernel(DepthToSpace,inputs,attrs)}var depthToSpace=op({depthToSpace_:depthToSpace_});function depthwiseConv2d_(x,filter,strides,pad,dataFormat,dilations,dimRoundingMode){if(dataFormat===void 0){dataFormat="NHWC"}if(dilations===void 0){dilations=[1,1]}var $x=convertToTensor(x,"x","depthwiseConv2d","float32");var $filter=convertToTensor(filter,"filter","depthwiseConv2d","float32");var x4D=$x;var reshapedTo4D=false;if($x.rank===3){reshapedTo4D=true;x4D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2]])}assert(x4D.rank===4,function(){return"Error in depthwiseConv2d: input must be rank 4, but got "+("rank "+x4D.rank+".")});assert($filter.rank===4,function(){return"Error in depthwiseConv2d: filter must be rank 4, but got rank "+($filter.rank+".")});assert(x4D.shape[3]===$filter.shape[2],function(){return"Error in depthwiseConv2d: number of input channels "+("("+x4D.shape[3]+") must match the inChannels dimension in ")+("filter "+$filter.shape[2]+".")});if(dimRoundingMode!=null){assert(isInt(pad),function(){return"Error in depthwiseConv2d: pad must be an integer when using, "+("dimRoundingMode "+dimRoundingMode+" but got pad "+pad+".")})}var inputs={x:x4D,filter:$filter};var attrs={strides:strides,pad:pad,dataFormat:dataFormat,dilations:dilations,dimRoundingMode:dimRoundingMode};var res=ENGINE.runKernel(DepthwiseConv2dNative,inputs,attrs);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return res}var depthwiseConv2d$1=op({depthwiseConv2d_:depthwiseConv2d_});function diag_(x){var $x=convertToTensor(x,"x","diag");var inputs={x:$x};return ENGINE.runKernel(Diag,inputs)}var diag=op({diag_:diag_});function dilation2d_(x,filter,strides,pad,dilations,dataFormat){if(dilations===void 0){dilations=[1,1]}if(dataFormat===void 0){dataFormat="NHWC"}var $x=convertToTensor(x,"x","dilation2d");var $filter=convertToTensor(filter,"filter","dilation2d");assert($x.rank===3||$x.rank===4,function(){return"Error in dilation2d: input must be rank 3 or 4, but got rank "+($x.rank+".")});assert($filter.rank===3,function(){return"Error in dilation2d: filter must be rank 3, but got rank "+($filter.rank+".")});assert(dataFormat==="NHWC",function(){return"Error in dilation2d: Only NHWC is currently supported, "+("but got dataFormat of "+dataFormat)});var x4D=$x;var reshapedTo4D=false;if($x.rank===3){x4D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2]]);reshapedTo4D=true}var inputs={x:x4D,filter:$filter};var attrs={strides:strides,pad:pad,dilations:dilations};var res=ENGINE.runKernel(Dilation2D,inputs,attrs);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return res}var dilation2d=op({dilation2d_:dilation2d_});function getBroadcastDims(inShape,outShape){var inRank=inShape.length;var dims=[];for(var i=0;i<inRank;i++){var dim=inRank-1-i;var a=inShape[dim]||1;var b=outShape[outShape.length-1-i]||1;if(b>1&&a===1){dims.unshift(dim)}}return dims}function getReductionAxes(inShape,outShape){var result=[];for(var i=0;i<outShape.length;i++){var inDim=inShape[inShape.length-i-1];var outAxis=outShape.length-i-1;var outDim=outShape[outAxis];if(inDim==null||inDim===1&&outDim>1){result.unshift(outAxis)}}return result}function assertAndGetBroadcastShape(shapeA,shapeB){var result=[];var l=Math.max(shapeA.length,shapeB.length);for(var i=0;i<l;i++){var a=shapeA[shapeA.length-i-1];if(a==null){a=1}var b=shapeB[shapeB.length-i-1];if(b==null){b=1}if(a===1){result.unshift(b)}else if(b===1){result.unshift(a)}else if(a!==b){var errMsg="Operands could not be broadcast together with shapes "+(shapeA+" and "+shapeB+".");throw Error(errMsg)}else{result.unshift(a)}}return result}function equal_(a,b){var _a;var $a=convertToTensor(a,"a","equal","string_or_numeric");var $b=convertToTensor(b,"b","equal","string_or_numeric");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];assertAndGetBroadcastShape($a.shape,$b.shape);var inputs={a:$a,b:$b};return ENGINE.runKernel(Equal,inputs)}var equal=op({equal_:equal_});function where_(condition,a,b){var $a=convertToTensor(a,"a","where");var $b=convertToTensor(b,"b","where");var $condition=convertToTensor(condition,"condition","where","bool");var broadcastShape=assertAndGetBroadcastShape(assertAndGetBroadcastShape($condition.shape,$a.shape),$b.shape);var $broadcastedCondition=broadcastTo($condition,broadcastShape);var $broadcastedA=broadcastTo($a,broadcastShape);var $broadcastedB=broadcastTo($b,broadcastShape);var inputs={condition:$broadcastedCondition,t:$broadcastedA,e:$broadcastedB};return ENGINE.runKernel(Select,inputs)}var where=op({where_:where_});function zerosLike_(x){var $x=convertToTensor(x,"x","zerosLike");var inputs={x:$x};return ENGINE.runKernel(ZerosLike,inputs)}var zerosLike=op({zerosLike_:zerosLike_});function divNoNan_(a,b){var _a;var $a=convertToTensor(a,"a","div");var $b=convertToTensor(b,"b","div");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];var divResult=div($a,$b);var zeros=zerosLike(divResult);var bEqualsZero=equal($b,zeros);return where(bEqualsZero,zeros,divResult)}var divNoNan=op({divNoNan_:divNoNan_});function dot_(t1,t2){var $t1=convertToTensor(t1,"t1","dot");var $t2=convertToTensor(t2,"t2","dot");assert(($t1.rank===1||$t1.rank===2)&&($t2.rank===1||$t2.rank===2),function(){return"Error in dot: inputs must all be rank 1 or 2, but got ranks "+($t1.rank+" and "+$t2.rank+".")});var t1Inner=$t1.rank===1?$t1.size:$t1.shape[1];var t2Inner=$t2.rank===1?$t2.size:$t2.shape[0];assert(t1Inner===t2Inner,function(){return"Error in dot: inner dimensions of inputs must match, but got "+(t1Inner+" and "+t2Inner+".")});if($t1.rank===1&&$t2.rank===1){var t12D=reshape($t1,[1,-1]);var t22D=reshape($t2,[-1,1]);var t1t2=matMul$1(t12D,t22D);return reshape(t1t2,[])}else if($t1.rank===1&&$t2.rank===2){var t12D=reshape($t1,[1,-1]);var t22D=reshape($t2,[$t2.shape[0],$t2.shape[1]]);var t1t2=matMul$1(t12D,t22D);return reshape(t1t2,[t1t2.size])}else if($t1.rank===2&&$t2.rank===1){var t22D=reshape($t2,[-1,1]);var t1t2=matMul$1($t1,t22D);return reshape(t1t2,[t1t2.size])}else{var t22D=reshape($t2,[$t2.shape[0],$t2.shape[1]]);var t1t2=matMul$1($t1,t22D);return t1t2}}var dot=op({dot_:dot_});function einsum_(equation){var tensors=[];for(var _i=1;_i<arguments.length;_i++){tensors[_i-1]=arguments[_i]}var $tensors=tensors.map(function(t,i){return convertToTensor(t,"tensors"+i,"einsum")});var attrs={equation:equation};return ENGINE.runKernel(Einsum,$tensors,attrs)}var einsum=op({einsum_:einsum_});function elu_(x){var $x=convertToTensor(x,"x","elu","float32");var inputs={x:$x};return ENGINE.runKernel(Elu,inputs)}var elu=op({elu_:elu_});function erf_(x){var $x=convertToTensor(x,"x","erf");assert($x.dtype==="int32"||$x.dtype==="float32",function(){return"Input dtype must be `int32` or `float32`."});if($x.dtype==="int32"){$x=cast($x,"float32")}var inputs={x:$x};return ENGINE.runKernel(Erf,inputs)}var erf=op({erf_:erf_});function exp_(x){var $x=convertToTensor(x,"x","exp");var inputs={x:$x};return ENGINE.runKernel(Exp,inputs)}var exp=op({exp_:exp_});function expandDims_(x,axis){if(axis===void 0){axis=0}var $x=convertToTensor(x,"x","expandDims","string_or_numeric");assert(axis<=$x.rank,function(){return"Axis must be <= rank of the tensor"});var inputs={input:$x};var attrs={dim:axis};return ENGINE.runKernel(ExpandDims,inputs,attrs)}var expandDims=op({expandDims_:expandDims_});function expm1_(x){var $x=convertToTensor(x,"x","expm1");var inputs={x:$x};return ENGINE.runKernel(Expm1,inputs)}var expm1=op({expm1_:expm1_});function tile_(x,reps){var $x=convertToTensor(x,"x","tile","string_or_numeric");assert($x.rank===reps.length,function(){return"Error in transpose: rank of input "+$x.rank+" "+("must match length of reps "+reps+".")});var inputs={x:$x};var attrs={reps:reps};return ENGINE.runKernel(Tile,inputs,attrs)}var tile=op({tile_:tile_});function eye_(numRows,numColumns,batchShape,dtype){if(dtype===void 0){dtype="float32"}if(numColumns==null){numColumns=numRows}var buff=buffer([numRows,numColumns],dtype);var n=numRows<=numColumns?numRows:numColumns;for(var i=0;i<n;++i){buff.set(1,i,i)}var out=reshape(buff.toTensor(),[numRows,numColumns]);if(batchShape==null){return out}else{if(batchShape.length===1){return tile(expandDims(out,0),[batchShape[0],1,1])}else if(batchShape.length===2){return tile(expandDims(expandDims(out,0),0),[batchShape[0],batchShape[1],1,1])}else if(batchShape.length===3){return tile(expandDims(expandDims(expandDims(out,0),0),0),[batchShape[0],batchShape[1],batchShape[2],1,1])}else{throw new Error("eye() currently supports only 1D and 2D "+("batchShapes, but received "+batchShape.length+"D."))}}}var eye=op({eye_:eye_});function fill(shape,value,dtype){var attrs={shape:shape,value:value,dtype:dtype};return ENGINE.runKernel(Fill,{},attrs)}function floor_(x){var $x=convertToTensor(x,"x","floor","float32");var inputs={x:$x};return ENGINE.runKernel(Floor,inputs)}var floor=op({floor_:floor_});function gather_(x,indices,axis,batchDims){if(axis===void 0){axis=0}if(batchDims===void 0){batchDims=0}var $x=convertToTensor(x,"x","gather");var $indices=convertToTensor(indices,"indices","gather","int32");var inputs={x:$x,indices:$indices};var attrs={axis:axis,batchDims:batchDims};return ENGINE.runKernel(GatherV2,inputs,attrs)}var gather=op({gather_:gather_});function greater_(a,b){var _a;var $a=convertToTensor(a,"a","greater","string_or_numeric");var $b=convertToTensor(b,"b","greater","string_or_numeric");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];assertAndGetBroadcastShape($a.shape,$b.shape);var inputs={a:$a,b:$b};return ENGINE.runKernel(Greater,inputs)}var greater=op({greater_:greater_});function greaterEqual_(a,b){var _a;var $a=convertToTensor(a,"a","greaterEqual","string_or_numeric");var $b=convertToTensor(b,"b","greaterEqual","string_or_numeric");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];assertAndGetBroadcastShape($a.shape,$b.shape);var inputs={a:$a,b:$b};return ENGINE.runKernel(GreaterEqual,inputs)}var greaterEqual=op({greaterEqual_:greaterEqual_});function imag_(input){var $input=convertToTensor(input,"input","imag");var inputs={input:$input};return ENGINE.runKernel(Imag,inputs)}var imag=op({imag_:imag_});function isFinite_(x){var $x=convertToTensor(x,"x","isFinite");var inputs={x:$x};return ENGINE.runKernel(IsFinite,inputs)}var isFinite$1=op({isFinite_:isFinite_});function isInf_(x){var $x=convertToTensor(x,"x","isInf");var inputs={x:$x};return ENGINE.runKernel(IsInf,inputs)}var isInf=op({isInf_:isInf_});function isNaN_(x){var $x=convertToTensor(x,"x","isNaN");var inputs={x:$x};return ENGINE.runKernel(IsNan,inputs)}var isNaN$1=op({isNaN_:isNaN_});function leakyRelu_(x,alpha){if(alpha===void 0){alpha=.2}var $x=convertToTensor(x,"x","leakyRelu");var inputs={x:$x};var attrs={alpha:alpha};return ENGINE.runKernel(LeakyRelu,inputs,attrs)}var leakyRelu=op({leakyRelu_:leakyRelu_});function less_(a,b){var _a;var $a=convertToTensor(a,"a","less","string_or_numeric");var $b=convertToTensor(b,"b","less","string_or_numeric");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];assertAndGetBroadcastShape($a.shape,$b.shape);var inputs={a:$a,b:$b};return ENGINE.runKernel(Less,inputs)}var less=op({less_:less_});function lessEqual_(a,b){var _a;var $a=convertToTensor(a,"a","lessEqual","string_or_numeric");var $b=convertToTensor(b,"b","lessEqual","string_or_numeric");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];assertAndGetBroadcastShape($a.shape,$b.shape);var inputs={a:$a,b:$b};return ENGINE.runKernel(LessEqual,inputs)}var lessEqual=op({lessEqual_:lessEqual_});function linspace(start,stop,num){if(num<=0){throw new Error("The number of values should be positive.")}var attrs={start:start,stop:stop,num:num};return ENGINE.runKernel(LinSpace,{},attrs)}function localResponseNormalization_(x,depthRadius,bias,alpha,beta){if(depthRadius===void 0){depthRadius=5}if(bias===void 0){bias=1}if(alpha===void 0){alpha=1}if(beta===void 0){beta=.5}var $x=convertToTensor(x,"x","localResponseNormalization");assert($x.rank===4||$x.rank===3,function(){return"Error in localResponseNormalization: x must be rank 3 or 4 but got\n               rank "+$x.rank+"."});assert(isInt(depthRadius),function(){return"Error in localResponseNormalization: depthRadius must be an "+("integer but got depthRadius "+depthRadius+".")});var x4D=$x;var reshapedTo4D=false;if($x.rank===3){reshapedTo4D=true;x4D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2]])}var inputs={x:x4D};var attrs={depthRadius:depthRadius,bias:bias,alpha:alpha,beta:beta};var res=ENGINE.runKernel(LRN,inputs,attrs);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}else{return res}}var localResponseNormalization=op({localResponseNormalization_:localResponseNormalization_});function log_(x){var $x=convertToTensor(x,"x","log","float32");var inputs={x:$x};return ENGINE.runKernel(Log,inputs)}var log=op({log_:log_});function log1p_(x){var $x=convertToTensor(x,"x","log1p");var inputs={x:$x};return ENGINE.runKernel(Log1p,inputs)}var log1p=op({log1p_:log1p_});function grad(f){assert(isFunction(f),function(){return"The f passed in grad(f) must be a function"});return function(x,dy){var $x=convertToTensor(x,"x","tf.grad","string_or_numeric");var $dy=dy!=null?convertToTensor(dy,"dy","tf.grad"):null;return ENGINE.tidy(function(){var _a=ENGINE.gradients(function(){return f($x)},[$x],$dy),value=_a.value,grads=_a.grads;if($dy!=null){assertShapesMatch(value.shape,$dy.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape "+"returned by f(x)")}checkGrads(grads);return grads[0]})}}function grads(f){assert(isFunction(f),function(){return"The f passed in grads(f) must be a function"});return function(args,dy){assert(Array.isArray(args),function(){return"The args passed in grads(f)(args) must be an array "+"of `Tensor`s or `TensorLike`s"});var $args=convertToTensorArray(args,"args","tf.grads","string_or_numeric");var $dy=dy!=null?convertToTensor(dy,"dy","tf.grads"):null;return ENGINE.tidy(function(){var _a=ENGINE.gradients(function(){return f.apply(void 0,__spread($args))},$args,$dy),value=_a.value,grads=_a.grads;if($dy!=null){assertShapesMatch(value.shape,$dy.shape,"The shape of dy passed in grads(f)([x1,...], dy) must "+"match the shape returned by f([x1,...])")}checkGrads(grads);return grads})}}function valueAndGrad(f){assert(isFunction(f),function(){return"The f passed in valueAndGrad(f) must be a function"});return function(x,dy){assert(x instanceof Tensor,function(){return"The x passed in valueAndGrad(f)(x) must be a tensor"});assert(dy==null||dy instanceof Tensor,function(){return"The dy passed in valueAndGrad(f)(x, dy) must be a tensor"});var _a=ENGINE.gradients(function(){return f(x)},[x],dy),grads=_a.grads,value=_a.value;checkGrads(grads);return{grad:grads[0],value:value}}}function valueAndGrads(f){assert(isFunction(f),function(){return"The f passed in valueAndGrads(f) must be a function"});return function(args,dy){assert(Array.isArray(args)&&args.every(function(arg){return arg instanceof Tensor}),function(){return"The args passed in valueAndGrads(f)(args) must be array of "+"tensors"});assert(dy==null||dy instanceof Tensor,function(){return"The dy passed in valueAndGrads(f)(args, dy) must be a tensor"});var res=ENGINE.gradients(function(){return f.apply(void 0,__spread(args))},args,dy);if(dy!=null){assertShapesMatch(res.value.shape,dy.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must "+"match the shape returned by f([x1,...])")}checkGrads(res.grads);return res}}function variableGrads(f,varList){assert(isFunction(f),function(){return"The f passed in variableGrads(f) must be a function"});assert(varList==null||Array.isArray(varList)&&varList.every(function(v){return v instanceof Variable}),function(){return"The varList passed in variableGrads(f, varList) must be an array "+"of variables"});var specifiedVarList=varList!=null;if(!specifiedVarList){varList=[];for(var varName in ENGINE.registeredVariables){varList.push(ENGINE.registeredVariables[varName])}}var specifiedNonTrainable=specifiedVarList?varList.filter(function(variable){return!variable.trainable}):null;var originalVarCount=varList.length;varList=varList.filter(function(variable){return variable.trainable});assert(varList.length>0,function(){return"variableGrads() expects at least one of the input variables to "+("be trainable, but none of the "+originalVarCount+" variables is ")+"trainable."});var allowNoGradients=true;var _a=ENGINE.gradients(f,varList,null,allowNoGradients),value=_a.value,grads=_a.grads;assert(grads.some(function(g){return g!=null}),function(){return"Cannot find a connection between any variable and the result of "+"the loss function y=f(x). Please make sure the operations that "+"use variables are inside the function f passed to minimize()."});assert(value.rank===0,function(){return"The f passed in variableGrads(f) must return a scalar, but it "+("returned a rank-"+value.rank+" tensor")});var namedGrads={};varList.forEach(function(v,i){if(grads[i]!=null){namedGrads[v.name]=grads[i]}});if(specifiedNonTrainable!=null){specifiedNonTrainable.forEach(function(v){return namedGrads[v.name]=null})}return{value:value,grads:namedGrads}}function customGrad(f){return ENGINE.customGrad(f)}function checkGrads(grads){var numNullGradients=grads.filter(function(g){return g==null}).length;if(numNullGradients>0){throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that\n    the f you passed encloses all operations that lead from x to y.")}}function neg_(x){var $x=convertToTensor(x,"x","neg");var inputs={x:$x};return ENGINE.runKernel(Neg,inputs)}var neg=op({neg_:neg_});function softplus_(x){var $x=convertToTensor(x,"x","softplus");var inputs={x:$x};return ENGINE.runKernel(Softplus,inputs)}var softplus=op({softplus_:softplus_});function logSigmoid_(x){var $x=convertToTensor(x,"x","logSigmoid");var customOp=customGrad(function(x){var value=neg(softplus(neg(x)));var gradFunc=function(dy){var derX=mul(dy,sigmoid(neg(x)));return derX};return{value:value,gradFunc:gradFunc}});return customOp($x)}var logSigmoid=op({logSigmoid_:logSigmoid_});function max_(x,axis,keepDims){if(axis===void 0){axis=null}if(keepDims===void 0){keepDims=false}var $x=convertToTensor(x,"x","max");var inputs={x:$x};var attrs={reductionIndices:axis,keepDims:keepDims};return ENGINE.runKernel(Max,inputs,attrs)}var max=op({max_:max_});function sub_(a,b){var _a;var $a=convertToTensor(a,"a","sub");var $b=convertToTensor(b,"b","sub");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];var inputs={a:$a,b:$b};return ENGINE.runKernel(Sub,inputs)}var sub=op({sub_:sub_});function sum_(x,axis,keepDims){if(axis===void 0){axis=null}if(keepDims===void 0){keepDims=false}var $x=convertToTensor(x,"x","sum");if($x.dtype==="bool"){$x=cast($x,"int32")}var inputs={x:$x};var attrs={axis:axis,keepDims:keepDims};return ENGINE.runKernel(Sum,inputs,attrs)}var sum=op({sum_:sum_});function logSoftmax_(logits,axis){if(axis===void 0){axis=-1}var $logits=convertToTensor(logits,"logits","logSoftmax");if(axis===-1){axis=$logits.rank-1}if(axis!==$logits.rank-1){throw Error("Log Softmax along a non-last dimension is not yet supported. "+("Logits was rank "+$logits.rank+" and axis was "+axis))}var customOp=customGrad(function(logits,save){var keepDims=true;var xMax=max(logits,axis,true);var shifted=sub(logits,xMax);var value=sub(cast(shifted,"float32"),log(sum(exp(shifted),axis,keepDims)));save([value]);var gradFunc=function(dy,saved){var _a=__read(saved,1),value=_a[0];var keepDims=true;var softmax=exp(value);return sub(dy,mul(sum(dy,axis,keepDims),softmax))};return{value:value,gradFunc:gradFunc}});return customOp($logits)}var logSoftmax=op({logSoftmax_:logSoftmax_});function axesAreInnerMostDims(axes,rank){for(var i=0;i<axes.length;++i){if(axes[axes.length-i-1]!==rank-1-i){return false}}return true}function combineLocations(outputLoc,reduceLoc,axes){var rank=outputLoc.length+reduceLoc.length;var loc=[];var outIdx=0;var reduceIdx=0;for(var dim=0;dim<rank;dim++){if(axes.indexOf(dim)===-1){loc.push(outputLoc[outIdx++])}else{loc.push(reduceLoc[reduceIdx++])}}return loc}function computeOutAndReduceShapes(aShape,axes){var outShape=[];var rank=aShape.length;for(var dim=0;dim<rank;dim++){if(axes.indexOf(dim)===-1){outShape.push(aShape[dim])}}var reduceShape=axes.map(function(dim){return aShape[dim]});return[outShape,reduceShape]}function expandShapeToKeepDim(shape,axes){var reduceSubShape=axes.map(function(x){return 1});return combineLocations(shape,reduceSubShape,axes)}function assertAxesAreInnerMostDims(msg,axes,rank){assert(axesAreInnerMostDims(axes,rank),function(){return msg+" supports only inner-most axes for now. "+("Got axes "+axes+" and rank-"+rank+" input.")})}function getAxesPermutation(axes,rank){if(axesAreInnerMostDims(axes,rank)){return null}var result=[];for(var i=0;i<rank;++i){if(axes.indexOf(i)===-1){result.push(i)}}axes.forEach(function(axis){return result.push(axis)});return result}function getUndoAxesPermutation(axes){return axes.map(function(axis,i){return[i,axis]}).sort(function(a,b){return a[1]-b[1]}).map(function(x){return x[0]})}function getInnerMostAxes(numAxes,rank){var res=[];for(var i=rank-numAxes;i<rank;++i){res.push(i)}return res}function logSumExp_(x,axis,keepDims){if(axis===void 0){axis=null}if(keepDims===void 0){keepDims=false}var $x=convertToTensor(x,"x","logSumExp");var axes=parseAxisParam(axis,$x.shape);var xMax=max($x,axes,true);var a=sub($x,xMax);var b=exp(a);var c=sum(b,axes);var d=log(c);var res=add(reshape(xMax,d.shape),d);if(keepDims){var newShape=expandShapeToKeepDim(res.shape,axes);return reshape(res,newShape)}return res}var logSumExp=op({logSumExp_:logSumExp_});function logicalAnd_(a,b){var $a=convertToTensor(a,"a","logicalAnd","bool");var $b=convertToTensor(b,"b","logicalAnd","bool");assertAndGetBroadcastShape($a.shape,$b.shape);var inputs={a:$a,b:$b};return ENGINE.runKernel(LogicalAnd,inputs)}var logicalAnd=op({logicalAnd_:logicalAnd_});function logicalNot_(x){var $x=convertToTensor(x,"x","logicalNot","bool");var inputs={x:$x};return ENGINE.runKernel(LogicalNot,inputs)}var logicalNot=op({logicalNot_:logicalNot_});function logicalOr_(a,b){var $a=convertToTensor(a,"a","logicalOr","bool");var $b=convertToTensor(b,"b","logicalOr","bool");assertAndGetBroadcastShape($a.shape,$b.shape);var inputs={a:$a,b:$b};return ENGINE.runKernel(LogicalOr,inputs)}var logicalOr=op({logicalOr_:logicalOr_});function logicalXor_(a,b){var $a=convertToTensor(a,"a","logicalXor","bool");var $b=convertToTensor(b,"b","logicalXor","bool");assertAndGetBroadcastShape($a.shape,$b.shape);return logicalAnd(logicalOr(a,b),logicalNot(logicalAnd(a,b)))}var logicalXor=op({logicalXor_:logicalXor_});function maxPool_(x,filterSize,strides,pad,dimRoundingMode){var $x=convertToTensor(x,"x","maxPool");var dilations=1;var x4D=$x;var reshapedTo4D=false;if($x.rank===3){reshapedTo4D=true;x4D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2]])}assert(x4D.rank===4,function(){return"Error in maxPool: input must be rank 4 but got rank "+x4D.rank+"."});assert(eitherStridesOrDilationsAreOne(strides,dilations),function(){return"Error in maxPool: Either strides or dilations must be 1. "+("Got strides "+strides+" and dilations '"+dilations+"'")});if(dimRoundingMode!=null){assert(isInt(pad),function(){return"Error in maxPool: pad must be an integer when using, "+("dimRoundingMode "+dimRoundingMode+" but got pad "+pad+".")})}var inputs={x:x4D};var attrs={filterSize:filterSize,strides:strides,pad:pad,dimRoundingMode:dimRoundingMode};var res=ENGINE.runKernel(MaxPool,inputs,attrs);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return res}var maxPool=op({maxPool_:maxPool_});function maxPool3d_(x,filterSize,strides,pad,dimRoundingMode,dataFormat){if(filterSize===void 0){filterSize=[1,1,1]}if(dataFormat===void 0){dataFormat="NDHWC"}var $x=convertToTensor(x,"x","maxPool3d");var x5D=$x;var reshapedTo5D=false;if($x.rank===4){reshapedTo5D=true;x5D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2],$x.shape[3]])}assert(x5D.rank===5,function(){return"Error in maxPool3d: x must be rank 5 but got rank "+x5D.rank+"."});assert(dataFormat==="NDHWC",function(){return"Error in maxPool3d: Only NDHWC is currently supported, "+("but got dataFormat of "+dataFormat)});if(dimRoundingMode!=null){assert(isInt(pad),function(){return"Error in maxPool3d: pad must be an integer when using, "+("dimRoundingMode "+dimRoundingMode+" but got pad "+pad+".")})}var inputs={x:x5D};var attrs={filterSize:filterSize,strides:strides,pad:pad,dimRoundingMode:dimRoundingMode,dataFormat:dataFormat};var res=ENGINE.runKernel(MaxPool3D,inputs,attrs);if(reshapedTo5D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3],res.shape[4]])}return res}var maxPool3d=op({maxPool3d_:maxPool3d_});function maxPoolWithArgmax_(x,filterSize,strides,pad,includeBatchInIndex){if(includeBatchInIndex===void 0){includeBatchInIndex=false}var $x=convertToTensor(x,"x","maxPoolWithArgmax");var inputs={x:$x};var attrs={filterSize:filterSize,strides:strides,pad:pad,includeBatchInIndex:includeBatchInIndex};var result=ENGINE.runKernel(MaxPoolWithArgmax,inputs,attrs);return{result:result[0],indexes:result[1]}}var maxPoolWithArgmax=op({maxPoolWithArgmax_:maxPoolWithArgmax_});function maximum_(a,b){var _a;var $a=convertToTensor(a,"a","maximum");var $b=convertToTensor(b,"b","maximum");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];if($a.dtype==="bool"){$a=cast($a,"int32");$b=cast($b,"int32")}assertAndGetBroadcastShape($a.shape,$b.shape);var inputs={a:$a,b:$b};return ENGINE.runKernel(Maximum,inputs)}var maximum=op({maximum_:maximum_});function mean_(x,axis,keepDims){if(axis===void 0){axis=null}if(keepDims===void 0){keepDims=false}var $x=convertToTensor(x,"x","mean");var inputs={x:$x};var attrs={axis:axis,keepDims:keepDims};return ENGINE.runKernel(Mean,inputs,attrs)}var mean=op({mean_:mean_});function zeros(shape,dtype){if(dtype===void 0){dtype="float32"}if(dtype==="complex64"){var real=zeros(shape,"float32");var imag=zeros(shape,"float32");return complex(real,imag)}var values=makeZerosTypedArray(sizeFromShape(shape),dtype);return ENGINE.makeTensor(values,shape,dtype)}function ones(shape,dtype){if(dtype===void 0){dtype="float32"}if(dtype==="complex64"){var real=ones(shape,"float32");var imag=zeros(shape,"float32");return complex(real,imag)}var values=makeOnesTypedArray(sizeFromShape(shape),dtype);return ENGINE.makeTensor(values,shape,dtype)}function meshgrid(x,y,_a){var _b=(_a===void 0?{}:_a).indexing,indexing=_b===void 0?"xy":_b;if(indexing!=="xy"&&indexing!=="ij"){throw new TypeError(indexing+" is not a valid third argument to meshgrid")}if(x===undefined){return[]}var $x=convertToTensor(x,"x","meshgrid",x instanceof Tensor?x.dtype:"float32");if(y===undefined){return[$x]}var $y=convertToTensor(y,"y","meshgrid",y instanceof Tensor?y.dtype:"float32");var w=sizeFromShape($x.shape);var h=sizeFromShape($y.shape);if(indexing==="xy"){$x=reshape($x,[1,-1]);$y=reshape($y,[-1,1]);return[matMul$1(ones([h,1],$x.dtype),$x),matMul$1($y,ones([1,w],$y.dtype))]}$x=reshape($x,[-1,1]);$y=reshape($y,[1,-1]);return[matMul$1($x,ones([1,h],$x.dtype)),matMul$1(ones([w,1],$y.dtype),$y)]}function min_(x,axis,keepDims){if(axis===void 0){axis=null}if(keepDims===void 0){keepDims=false}var $x=convertToTensor(x,"x","min");var inputs={x:$x};var attrs={axis:axis,keepDims:keepDims};return ENGINE.runKernel(Min,inputs,attrs)}var min=op({min_:min_});function minimum_(a,b){var _a;var $a=convertToTensor(a,"a","minimum");var $b=convertToTensor(b,"b","minimum");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];if($a.dtype==="bool"){$a=cast($a,"int32");$b=cast($b,"int32")}assertAndGetBroadcastShape($a.shape,$b.shape);var inputs={a:$a,b:$b};return ENGINE.runKernel(Minimum,inputs)}var minimum=op({minimum_:minimum_});function mirrorPad_(x,paddings,mode){assert(mode==="reflect"||mode==="symmetric",function(){return"Invalid mode. Mode must be either reflect or symmetric. "+("Got "+mode+".")});var $x=convertToTensor(x,"x","mirrorPad");if($x.rank===0){throw new Error("mirrorPad(scalar) is not defined. "+"Pass non-scalar to mirrorPad")}assert(paddings.length===$x.rank,function(){return"Padding doesn't match input. Must be "+$x.rank+". "+("Got "+paddings.length+".")});var shapeOffset=mode==="reflect"?1:0;var _loop_1=function(i){assert(paddings[i].length===2,function(){return"Invalid number of paddings. Must be length of 2 each."});assert(paddings[i][0]>=0&&paddings[i][0]<=$x.shape[i]-shapeOffset&&paddings[i][1]>=0&&paddings[i][1]<=$x.shape[i]-shapeOffset,function(){return"Padding in dimension "+i+" cannot be greater than or equal "+("to "+($x.shape[i]-shapeOffset)+" or less than 0 for input of ")+("shape "+$x.shape)})};for(var i=0;i<$x.rank;i++){_loop_1(i)}var attrs={paddings:paddings,mode:mode};var inputs={x:$x};return ENGINE.runKernel(MirrorPad,inputs,attrs)}var mirrorPad=op({mirrorPad_:mirrorPad_});function mod_(a,b){var _a;var $a=convertToTensor(a,"a","mod");var $b=convertToTensor(b,"b","mod");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];var inputs={a:$a,b:$b};return ENGINE.runKernel(Mod,inputs)}var mod=op({mod_:mod_});function square_(x){var $x=convertToTensor(x,"x","square");var attrs={};return ENGINE.runKernel("Square",{x:$x},attrs)}var square=op({square_:square_});function moments_(x,axis,keepDims){if(axis===void 0){axis=null}if(keepDims===void 0){keepDims=false}x=convertToTensor(x,"x","moments");var axes=parseAxisParam(axis,x.shape);var xMean=mean(x,axes,keepDims);var keepDimsShape=xMean.shape;if(!keepDims){keepDimsShape=expandShapeToKeepDim(xMean.shape,axes)}var devSquared=square(sub(cast(x,"float32"),reshape(xMean,keepDimsShape)));var variance=mean(devSquared,axes,keepDims);return{mean:xMean,variance:variance}}var moments=op({moments_:moments_});function multiRNNCell_(lstmCells,data,c,h){var $data=convertToTensor(data,"data","multiRNNCell");var $c=convertToTensorArray(c,"c","multiRNNCell");var $h=convertToTensorArray(h,"h","multiRNNCell");var input=$data;var newStates=[];for(var i=0;i<lstmCells.length;i++){var output=lstmCells[i](input,$c[i],$h[i]);newStates.push(output[0]);newStates.push(output[1]);input=output[1]}var newC=[];var newH=[];for(var i=0;i<newStates.length;i+=2){newC.push(newStates[i]);newH.push(newStates[i+1])}return[newC,newH]}var multiRNNCell=op({multiRNNCell_:multiRNNCell_});function multinomial_(logits,numSamples,seed,normalized){if(normalized===void 0){normalized=false}var $logits=convertToTensor(logits,"logits","multinomial");var numOutcomes=$logits.size;var origRank=$logits.rank;if(numOutcomes<2){throw new Error("Error in multinomial: you need at least 2 outcomes, but got "+(numOutcomes+"."))}if(origRank>2){throw new Error("Rank of probabilities must be 1 or 2, but is "+origRank)}seed=seed||Math.random();var logits2D=origRank===1?reshape($logits,[1,-1]):$logits;var inputs={logits:logits2D};var attrs={numSamples:numSamples,seed:seed,normalized:normalized};var res=ENGINE.runKernel(Multinomial,inputs,attrs);return origRank===1?reshape(res,[res.size]):res}var multinomial=op({multinomial_:multinomial_});function notEqual_(a,b){var _a;var $a=convertToTensor(a,"a","notEqual","string_or_numeric");var $b=convertToTensor(b,"b","notEqual","string_or_numeric");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];assertAndGetBroadcastShape($a.shape,$b.shape);var inputs={a:$a,b:$b};return ENGINE.runKernel(NotEqual,inputs)}var notEqual=op({notEqual_:notEqual_});function onesLike_(x){var $x=convertToTensor(x,"x","onesLike");var inputs={x:$x};return ENGINE.runKernel(OnesLike,inputs)}var onesLike=op({onesLike_:onesLike_});function outerProduct_(v1,v2){var $v1=convertToTensor(v1,"v1","outerProduct");var $v2=convertToTensor(v2,"v2","outerProduct");assert($v1.rank===1&&$v2.rank===1,function(){return"Error in outerProduct: inputs must be rank 1, but got ranks "+($v1.rank+" and "+$v2.rank+".")});var v12D=reshape($v1,[-1,1]);var v22D=reshape($v2,[1,-1]);return matMul$1(v12D,v22D)}var outerProduct=op({outerProduct_:outerProduct_});function pad_(x,paddings,constantValue){if(constantValue===void 0){constantValue=0}var $x=convertToTensor(x,"x","pad");if($x.rank===0){throw new Error("pad(scalar) is not defined. Pass non-scalar to pad")}var attrs={paddings:paddings,constantValue:constantValue};var inputs={x:$x};return ENGINE.runKernel(PadV2,inputs,attrs)}var pad=op({pad_:pad_});function pad1d_(x,paddings,constantValue){if(constantValue===void 0){constantValue=0}assert(paddings.length===2,function(){return"Invalid number of paddings. Must be length of 2."});return pad(x,[paddings],constantValue)}var pad1d=op({pad1d_:pad1d_});function pad2d_(x,paddings,constantValue){if(constantValue===void 0){constantValue=0}assert(paddings.length===2&&paddings[0].length===2&&paddings[1].length===2,function(){return"Invalid number of paddings. Must be length of 2 each."});return pad(x,paddings,constantValue)}var pad2d=op({pad2d_:pad2d_});function pad3d_(x,paddings,constantValue){if(constantValue===void 0){constantValue=0}assert(paddings.length===3&&paddings[0].length===2&&paddings[1].length===2&&paddings[2].length===2,function(){return"Invalid number of paddings. Must be length of 2 each."});return pad(x,paddings,constantValue)}var pad3d=op({pad3d_:pad3d_});function pad4d_(x,paddings,constantValue){if(constantValue===void 0){constantValue=0}assert(paddings.length===4&&paddings[0].length===2&&paddings[1].length===2&&paddings[2].length===2&&paddings[3].length===2,function(){return"Invalid number of paddings. Must be length of 2 each."});return pad(x,paddings,constantValue)}var pad4d=op({pad4d_:pad4d_});function spaceToBatchND_(x,blockShape,paddings){var $x=convertToTensor(x,"x","spaceToBatchND");assert($x.rank>=1+blockShape.length,function(){return"input rank "+$x.rank+" should be > than [blockShape] "+blockShape.length});assert(paddings.length===blockShape.length,function(){return"paddings.shape[0] "+paddings.length+" must be equal to [blockShape] "+blockShape.length});assert($x.shape.reduce(function(a,b,i){if(i>0&&i<=blockShape.length){return a&&(b+paddings[i-1][0]+paddings[i-1][1])%blockShape[i-1]===0}return a},true),function(){return"input spatial dimensions "+$x.shape.slice(1)+" with paddings "+paddings.toString()+" must be divisible by blockShapes "+blockShape.toString()});var inputs={x:$x};var attrs={blockShape:blockShape,paddings:paddings};return ENGINE.runKernel(SpaceToBatchND,inputs,attrs)}var spaceToBatchND=op({spaceToBatchND_:spaceToBatchND_});function pool_(input,windowShape,poolingType,pad,dilations,strides){if(dilations==null){dilations=[1,1]}if(strides==null){strides=1}if(pad===0){pad="valid"}var $x=convertToTensor(input,"x","maxPool");var x4D=$x;var reshapedTo4D=false;if($x.rank===3){reshapedTo4D=true;x4D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2]])}assert(eitherStridesOrDilationsAreOne(strides,dilations),function(){return"Error in pool: Either strides or dilations must be 1. "+("Got strides "+strides+" and dilations '"+dilations+"'")});var convInfo=computePool2DInfo(x4D.shape,windowShape,strides,dilations,pad);var dilation=[convInfo.dilationHeight,convInfo.dilationWidth];var basePadding;if(pad==="same"){basePadding=withSpaceToBatchBasePaddings([convInfo.filterHeight,convInfo.filterWidth],dilation)}else{basePadding=[[0,0],[0,0]]}var isDilationOne=dilation[0]===1&&dilation[1]===1;var _a=__read(requiredSpaceToBatchPaddings([convInfo.inHeight,convInfo.inWidth],dilation,basePadding),2),adjustedPadding=_a[0],adjustedCrops=_a[1];var convertedPad=isDilationOne?pad:"valid";var convertedX=isDilationOne?x4D:spaceToBatchND(x4D,dilation,adjustedPadding);var forwardOp=poolingType==="avg"?function(){return avgPool(convertedX,windowShape,strides,convertedPad)}:function(){return maxPool(convertedX,windowShape,strides,convertedPad)};var y=forwardOp();var res=isDilationOne?y:batchToSpaceND(y,dilation,adjustedCrops);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return res}function requiredSpaceToBatchPaddings(inputShape,blockShape,basePadding){var padStart=basePadding.map(function(b){return b[0]});var origPadEnd=basePadding.map(function(b){return b[1]});var fullInputShape=inputShape.concat(padStart,origPadEnd);var padEndExtra=blockShape.map(function(b,i){return(b-fullInputShape[i]%b)%b});var padEnd=origPadEnd.map(function(s,i){return s+padEndExtra[i]});var paddings=blockShape.map(function(_,i){return[padStart[i],padEnd[i]]});var crops=blockShape.map(function(_,i){return[0,padEndExtra[i]]});return[paddings,crops]}function withSpaceToBatchBasePaddings(filterShape,dilation){var dilatedFilterShape=filterShape.map(function(s,i){return s+(s-1)*(dilation[i]-1)});var padExtraShape=dilatedFilterShape.map(function(s){return s-1});var padExtraStart=padExtraShape.map(function(s){return Math.floor(s/2)});var padExtraEnd=padExtraShape.map(function(s,i){return s-padExtraStart[i]});return padExtraShape.map(function(_,i){return[padExtraStart[i],padExtraEnd[i]]})}var pool=op({pool_:pool_});function pow_(base,exp){var _a;var $base=convertToTensor(base,"base","pow");var $exp=convertToTensor(exp,"exp","pow");_a=__read(makeTypesMatch($base,$exp),2),$base=_a[0],$exp=_a[1];var inputs={a:$base,b:$exp};return ENGINE.runKernel(Pow,inputs)}var pow=op({pow_:pow_});function prelu_(x,alpha){var $x=convertToTensor(x,"x","prelu");var $alpha=convertToTensor(alpha,"alpha","prelu");var inputs={x:$x,alpha:$alpha};return ENGINE.runKernel(Prelu,inputs)}var prelu=op({prelu_:prelu_});function prod_(x,axis,keepDims){if(axis===void 0){axis=null}if(keepDims===void 0){keepDims=false}var $x=convertToTensor(x,"x","prod");if($x.dtype==="bool"){$x=cast($x,"int32")}var inputs={x:$x};var attrs={axis:axis,keepDims:keepDims};return ENGINE.runKernel(Prod,inputs,attrs)}var prod=op({prod_:prod_});function rand_(shape,randFunction,dtype){var size=sizeFromShape(shape);var values=null;if(dtype==null||dtype==="float32"){values=new Float32Array(size)}else if(dtype==="int32"){values=new Int32Array(size)}else if(dtype==="bool"){values=new Uint8Array(size)}else{throw new Error("Unknown data type "+dtype)}for(var i=0;i<size;i++){values[i]=randFunction()}return ENGINE.makeTensor(values,shape,dtype)}var rand=op({rand_:rand_});var commonjsGlobal=typeof globalThis!=="undefined"?globalThis:typeof window!=="undefined"?window:typeof global!=="undefined"?global:typeof self!=="undefined"?self:{};function createCommonjsModule(fn){var module={exports:{}};return fn(module,module.exports),module.exports}var alea=createCommonjsModule(function(module){(function(global,module,define){function Alea(seed){var me=this,mash=Mash();me.next=function(){var t=2091639*me.s0+me.c*2.3283064365386963e-10;me.s0=me.s1;me.s1=me.s2;return me.s2=t-(me.c=t|0)};me.c=1;me.s0=mash(" ");me.s1=mash(" ");me.s2=mash(" ");me.s0-=mash(seed);if(me.s0<0){me.s0+=1}me.s1-=mash(seed);if(me.s1<0){me.s1+=1}me.s2-=mash(seed);if(me.s2<0){me.s2+=1}mash=null}function copy(f,t){t.c=f.c;t.s0=f.s0;t.s1=f.s1;t.s2=f.s2;return t}function impl(seed,opts){var xg=new Alea(seed),state=opts&&opts.state,prng=xg.next;prng.int32=function(){return xg.next()*4294967296|0};prng.double=function(){return prng()+(prng()*2097152|0)*11102230246251565e-32};prng.quick=prng;if(state){if(typeof state=="object")copy(state,xg);prng.state=function(){return copy(xg,{})}}return prng}function Mash(){var n=4022871197;var mash=function(data){data=String(data);for(var i=0;i<data.length;i++){n+=data.charCodeAt(i);var h=.02519603282416938*n;n=h>>>0;h-=n;h*=n;n=h>>>0;h-=n;n+=h*4294967296}return(n>>>0)*2.3283064365386963e-10};return mash}if(module&&module.exports){module.exports=impl}else if(define&&define.amd){define(function(){return impl})}else{this.alea=impl}})(commonjsGlobal,module,typeof undefined=="function")});var xor128=createCommonjsModule(function(module){(function(global,module,define){function XorGen(seed){var me=this,strseed="";me.x=0;me.y=0;me.z=0;me.w=0;me.next=function(){var t=me.x^me.x<<11;me.x=me.y;me.y=me.z;me.z=me.w;return me.w^=me.w>>>19^t^t>>>8};if(seed===(seed|0)){me.x=seed}else{strseed+=seed}for(var k=0;k<strseed.length+64;k++){me.x^=strseed.charCodeAt(k)|0;me.next()}}function copy(f,t){t.x=f.x;t.y=f.y;t.z=f.z;t.w=f.w;return t}function impl(seed,opts){var xg=new XorGen(seed),state=opts&&opts.state,prng=function(){return(xg.next()>>>0)/4294967296};prng.double=function(){do{var top=xg.next()>>>11,bot=(xg.next()>>>0)/4294967296,result=(top+bot)/(1<<21)}while(result===0);return result};prng.int32=xg.next;prng.quick=prng;if(state){if(typeof state=="object")copy(state,xg);prng.state=function(){return copy(xg,{})}}return prng}if(module&&module.exports){module.exports=impl}else if(define&&define.amd){define(function(){return impl})}else{this.xor128=impl}})(commonjsGlobal,module,typeof undefined=="function")});var xorwow=createCommonjsModule(function(module){(function(global,module,define){function XorGen(seed){var me=this,strseed="";me.next=function(){var t=me.x^me.x>>>2;me.x=me.y;me.y=me.z;me.z=me.w;me.w=me.v;return(me.d=me.d+362437|0)+(me.v=me.v^me.v<<4^(t^t<<1))|0};me.x=0;me.y=0;me.z=0;me.w=0;me.v=0;if(seed===(seed|0)){me.x=seed}else{strseed+=seed}for(var k=0;k<strseed.length+64;k++){me.x^=strseed.charCodeAt(k)|0;if(k==strseed.length){me.d=me.x<<10^me.x>>>4}me.next()}}function copy(f,t){t.x=f.x;t.y=f.y;t.z=f.z;t.w=f.w;t.v=f.v;t.d=f.d;return t}function impl(seed,opts){var xg=new XorGen(seed),state=opts&&opts.state,prng=function(){return(xg.next()>>>0)/4294967296};prng.double=function(){do{var top=xg.next()>>>11,bot=(xg.next()>>>0)/4294967296,result=(top+bot)/(1<<21)}while(result===0);return result};prng.int32=xg.next;prng.quick=prng;if(state){if(typeof state=="object")copy(state,xg);prng.state=function(){return copy(xg,{})}}return prng}if(module&&module.exports){module.exports=impl}else if(define&&define.amd){define(function(){return impl})}else{this.xorwow=impl}})(commonjsGlobal,module,typeof undefined=="function")});var xorshift7=createCommonjsModule(function(module){(function(global,module,define){function XorGen(seed){var me=this;me.next=function(){var X=me.x,i=me.i,t,v;t=X[i];t^=t>>>7;v=t^t<<24;t=X[i+1&7];v^=t^t>>>10;t=X[i+3&7];v^=t^t>>>3;t=X[i+4&7];v^=t^t<<7;t=X[i+7&7];t=t^t<<13;v^=t^t<<9;X[i]=v;me.i=i+1&7;return v};function init(me,seed){var j,X=[];if(seed===(seed|0)){X[0]=seed}else{seed=""+seed;for(j=0;j<seed.length;++j){X[j&7]=X[j&7]<<15^seed.charCodeAt(j)+X[j+1&7]<<13}}while(X.length<8)X.push(0);for(j=0;j<8&&X[j]===0;++j);if(j==8)X[7]=-1;me.x=X;me.i=0;for(j=256;j>0;--j){me.next()}}init(me,seed)}function copy(f,t){t.x=f.x.slice();t.i=f.i;return t}function impl(seed,opts){if(seed==null)seed=+new Date;var xg=new XorGen(seed),state=opts&&opts.state,prng=function(){return(xg.next()>>>0)/4294967296};prng.double=function(){do{var top=xg.next()>>>11,bot=(xg.next()>>>0)/4294967296,result=(top+bot)/(1<<21)}while(result===0);return result};prng.int32=xg.next;prng.quick=prng;if(state){if(state.x)copy(state,xg);prng.state=function(){return copy(xg,{})}}return prng}if(module&&module.exports){module.exports=impl}else if(define&&define.amd){define(function(){return impl})}else{this.xorshift7=impl}})(commonjsGlobal,module,typeof undefined=="function")});var xor4096=createCommonjsModule(function(module){(function(global,module,define){function XorGen(seed){var me=this;me.next=function(){var w=me.w,X=me.X,i=me.i,t,v;me.w=w=w+1640531527|0;v=X[i+34&127];t=X[i=i+1&127];v^=v<<13;t^=t<<17;v^=v>>>15;t^=t>>>12;v=X[i]=v^t;me.i=i;return v+(w^w>>>16)|0};function init(me,seed){var t,v,i,j,w,X=[],limit=128;if(seed===(seed|0)){v=seed;seed=null}else{seed=seed+"\0";v=0;limit=Math.max(limit,seed.length)}for(i=0,j=-32;j<limit;++j){if(seed)v^=seed.charCodeAt((j+32)%seed.length);if(j===0)w=v;v^=v<<10;v^=v>>>15;v^=v<<4;v^=v>>>13;if(j>=0){w=w+1640531527|0;t=X[j&127]^=v+w;i=0==t?i+1:0}}if(i>=128){X[(seed&&seed.length||0)&127]=-1}i=127;for(j=4*128;j>0;--j){v=X[i+34&127];t=X[i=i+1&127];v^=v<<13;t^=t<<17;v^=v>>>15;t^=t>>>12;X[i]=v^t}me.w=w;me.X=X;me.i=i}init(me,seed)}function copy(f,t){t.i=f.i;t.w=f.w;t.X=f.X.slice();return t}function impl(seed,opts){if(seed==null)seed=+new Date;var xg=new XorGen(seed),state=opts&&opts.state,prng=function(){return(xg.next()>>>0)/4294967296};prng.double=function(){do{var top=xg.next()>>>11,bot=(xg.next()>>>0)/4294967296,result=(top+bot)/(1<<21)}while(result===0);return result};prng.int32=xg.next;prng.quick=prng;if(state){if(state.X)copy(state,xg);prng.state=function(){return copy(xg,{})}}return prng}if(module&&module.exports){module.exports=impl}else if(define&&define.amd){define(function(){return impl})}else{this.xor4096=impl}})(commonjsGlobal,module,typeof undefined=="function")});var tychei=createCommonjsModule(function(module){(function(global,module,define){function XorGen(seed){var me=this,strseed="";me.next=function(){var b=me.b,c=me.c,d=me.d,a=me.a;b=b<<25^b>>>7^c;c=c-d|0;d=d<<24^d>>>8^a;a=a-b|0;me.b=b=b<<20^b>>>12^c;me.c=c=c-d|0;me.d=d<<16^c>>>16^a;return me.a=a-b|0};me.a=0;me.b=0;me.c=2654435769|0;me.d=1367130551;if(seed===Math.floor(seed)){me.a=seed/4294967296|0;me.b=seed|0}else{strseed+=seed}for(var k=0;k<strseed.length+20;k++){me.b^=strseed.charCodeAt(k)|0;me.next()}}function copy(f,t){t.a=f.a;t.b=f.b;t.c=f.c;t.d=f.d;return t}function impl(seed,opts){var xg=new XorGen(seed),state=opts&&opts.state,prng=function(){return(xg.next()>>>0)/4294967296};prng.double=function(){do{var top=xg.next()>>>11,bot=(xg.next()>>>0)/4294967296,result=(top+bot)/(1<<21)}while(result===0);return result};prng.int32=xg.next;prng.quick=prng;if(state){if(typeof state=="object")copy(state,xg);prng.state=function(){return copy(xg,{})}}return prng}if(module&&module.exports){module.exports=impl}else if(define&&define.amd){define(function(){return impl})}else{this.tychei=impl}})(commonjsGlobal,module,typeof undefined=="function")});var seedrandom$1=createCommonjsModule(function(module){(function(global,pool,math){var width=256,chunks=6,digits=52,rngname="random",startdenom=math.pow(width,chunks),significance=math.pow(2,digits),overflow=significance*2,mask=width-1,nodecrypto;function seedrandom(seed,options,callback){var key=[];options=options==true?{entropy:true}:options||{};var shortseed=mixkey(flatten(options.entropy?[seed,tostring(pool)]:seed==null?autoseed():seed,3),key);var arc4=new ARC4(key);var prng=function(){var n=arc4.g(chunks),d=startdenom,x=0;while(n<significance){n=(n+x)*width;d*=width;x=arc4.g(1)}while(n>=overflow){n/=2;d/=2;x>>>=1}return(n+x)/d};prng.int32=function(){return arc4.g(4)|0};prng.quick=function(){return arc4.g(4)/4294967296};prng.double=prng;mixkey(tostring(arc4.S),pool);return(options.pass||callback||function(prng,seed,is_math_call,state){if(state){if(state.S){copy(state,arc4)}prng.state=function(){return copy(arc4,{})}}if(is_math_call){math[rngname]=prng;return seed}else return prng})(prng,shortseed,"global"in options?options.global:this==math,options.state)}function ARC4(key){var t,keylen=key.length,me=this,i=0,j=me.i=me.j=0,s=me.S=[];if(!keylen){key=[keylen++]}while(i<width){s[i]=i++}for(i=0;i<width;i++){s[i]=s[j=mask&j+key[i%keylen]+(t=s[i])];s[j]=t}(me.g=function(count){var t,r=0,i=me.i,j=me.j,s=me.S;while(count--){t=s[i=mask&i+1];r=r*width+s[mask&(s[i]=s[j=mask&j+t])+(s[j]=t)]}me.i=i;me.j=j;return r})(width)}function copy(f,t){t.i=f.i;t.j=f.j;t.S=f.S.slice();return t}function flatten(obj,depth){var result=[],typ=typeof obj,prop;if(depth&&typ=="object"){for(prop in obj){try{result.push(flatten(obj[prop],depth-1))}catch(e){}}}return result.length?result:typ=="string"?obj:obj+"\0"}function mixkey(seed,key){var stringseed=seed+"",smear,j=0;while(j<stringseed.length){key[mask&j]=mask&(smear^=key[mask&j]*19)+stringseed.charCodeAt(j++)}return tostring(key)}function autoseed(){try{var out;if(nodecrypto&&(out=nodecrypto.randomBytes)){out=out(width)}else{out=new Uint8Array(width);(global.crypto||global.msCrypto).getRandomValues(out)}return tostring(out)}catch(e){var browser=global.navigator,plugins=browser&&browser.plugins;return[+new Date,global,plugins,global.screen,tostring(pool)]}}function tostring(a){return String.fromCharCode.apply(0,a)}mixkey(math.random(),pool);if(module.exports){module.exports=seedrandom;try{nodecrypto=require$$0__default["default"]}catch(ex){}}else{math["seed"+rngname]=seedrandom}})(typeof self!=="undefined"?self:commonjsGlobal,[],Math)});seedrandom$1.alea=alea;seedrandom$1.xor128=xor128;seedrandom$1.xorwow=xorwow;seedrandom$1.xorshift7=xorshift7;seedrandom$1.xor4096=xor4096;seedrandom$1.tychei=tychei;var seedrandom=seedrandom$1;var MPRandGauss=function(){function MPRandGauss(mean,stdDeviation,dtype,truncated,seed){this.mean=mean;this.stdDev=stdDeviation;this.dtype=dtype;this.nextVal=NaN;this.truncated=truncated;if(this.truncated){this.upper=this.mean+this.stdDev*2;this.lower=this.mean-this.stdDev*2}var seedValue=seed?seed:Math.random();this.random=seedrandom.alea(seedValue.toString())}MPRandGauss.prototype.nextValue=function(){if(!isNaN(this.nextVal)){var value=this.nextVal;this.nextVal=NaN;return value}var resultX,resultY;var isValid=false;while(!isValid){var v1=void 0,v2=void 0,s=void 0;do{v1=2*this.random()-1;v2=2*this.random()-1;s=v1*v1+v2*v2}while(s>=1||s===0);var mul=Math.sqrt(-2*Math.log(s)/s);resultX=this.mean+this.stdDev*v1*mul;resultY=this.mean+this.stdDev*v2*mul;if(!this.truncated||this.isValidTruncated(resultX)){isValid=true}}if(!this.truncated||this.isValidTruncated(resultY)){this.nextVal=this.convertValue(resultY)}return this.convertValue(resultX)};MPRandGauss.prototype.convertValue=function(value){if(this.dtype==null||this.dtype==="float32"){return value}return Math.round(value)};MPRandGauss.prototype.isValidTruncated=function(value){return value<=this.upper&&value>=this.lower};return MPRandGauss}();var RandGamma=function(){function RandGamma(alpha,beta,dtype,seed){this.alpha=alpha;this.beta=1/beta;this.dtype=dtype;var seedValue=seed?seed:Math.random();this.randu=seedrandom.alea(seedValue.toString());this.randn=new MPRandGauss(0,1,dtype,false,this.randu());if(alpha<1){this.d=alpha+2/3}else{this.d=alpha-1/3}this.c=1/Math.sqrt(9*this.d)}RandGamma.prototype.nextValue=function(){var x2,v0,v1,x,u,v;while(true){do{x=this.randn.nextValue();v=1+this.c*x}while(v<=0);v*=v*v;x2=x*x;v0=1-.331*x2*x2;v1=.5*x2+this.d*(1-v+Math.log(v));u=this.randu();if(u<v0||Math.log(u)<v1){break}}v=1/this.beta*this.d*v;if(this.alpha<1){v*=Math.pow(this.randu(),1/this.alpha)}return this.convertValue(v)};RandGamma.prototype.convertValue=function(value){if(this.dtype==="float32"){return value}return Math.round(value)};return RandGamma}();var UniformRandom=function(){function UniformRandom(min,max,dtype,seed){var _this=this;if(min===void 0){min=0}if(max===void 0){max=1}this.canReturnFloat=function(){return _this.dtype==null||_this.dtype==="float32"};this.min=min;this.range=max-min;this.dtype=dtype;if(seed==null){seed=Math.random()}if(typeof seed==="number"){seed=seed.toString()}if(!this.canReturnFloat()&&this.range<=1){throw new Error("The difference between "+min+" - "+max+" <= 1 and dtype is not float")}this.random=seedrandom.alea(seed)}UniformRandom.prototype.convertValue=function(value){if(this.canReturnFloat()){return value}return Math.round(value)};UniformRandom.prototype.nextValue=function(){return this.convertValue(this.min+this.range*this.random())};return UniformRandom}();function randomGamma_(shape,alpha,beta,dtype,seed){if(beta===void 0){beta=1}if(dtype===void 0){dtype="float32"}if(beta==null){beta=1}if(dtype==null){dtype="float32"}if(dtype!=="float32"&&dtype!=="int32"){throw new Error("Unsupported data type "+dtype)}var rgamma=new RandGamma(alpha,beta,dtype,seed);var res=buffer(shape,dtype);for(var i=0;i<res.values.length;i++){res.values[i]=rgamma.nextValue()}return res.toTensor()}var randomGamma=op({randomGamma_:randomGamma_});function randomNormal_(shape,mean,stdDev,dtype,seed){if(mean===void 0){mean=0}if(stdDev===void 0){stdDev=1}if(dtype!=null&&dtype==="bool"){throw new Error("Unsupported data type "+dtype)}var randGauss=new MPRandGauss(mean,stdDev,dtype,false,seed);var res=buffer(shape,dtype);for(var i=0;i<res.values.length;i++){res.values[i]=randGauss.nextValue()}return res.toTensor()}var randomNormal=op({randomNormal_:randomNormal_});function randomUniform_(shape,minval,maxval,dtype,seed){if(minval===void 0){minval=0}if(maxval===void 0){maxval=1}if(dtype===void 0){dtype="float32"}var res=buffer(shape,dtype);var random=new UniformRandom(minval,maxval,null,seed);for(var i=0;i<res.values.length;i++){res.values[i]=random.nextValue()}return res.toTensor()}var randomUniform=op({randomUniform_:randomUniform_});function range(start,stop,step,dtype){if(step===void 0){step=1}if(dtype===void 0){dtype="float32"}if(step===0){throw new Error("Cannot have a step of zero")}var attrs={start:start,stop:stop,step:step,dtype:dtype};return ENGINE.runKernel(Range,{},attrs)}function real_(input){var $input=convertToTensor(input,"input","real");var inputs={input:$input};return ENGINE.runKernel(Real,inputs)}var real=op({real_:real_});function reciprocal_(x){var $x=convertToTensor(x,"x","reciprocal");var inputs={x:$x};return ENGINE.runKernel(Reciprocal,inputs)}var reciprocal=op({reciprocal_:reciprocal_});function relu_(x){var $x=convertToTensor(x,"x","relu");var inputs={x:$x};return ENGINE.runKernel(Relu,inputs)}var relu=op({relu_:relu_});function relu6_(x){var $x=convertToTensor(x,"x","relu6");var inputs={x:$x};return ENGINE.runKernel(Relu6,inputs)}var relu6=op({relu6_:relu6_});function reverse_(x,axis){var $x=convertToTensor(x,"x","reverse");var inputs={x:$x};var attrs={dims:axis};return ENGINE.runKernel(Reverse,inputs,attrs)}var reverse=op({reverse_:reverse_});function reverse1d_(x){var $x=convertToTensor(x,"x","reverse");assert($x.rank===1,function(){return"Error in reverse1D: x must be rank 1 but got rank "+$x.rank+"."});return reverse($x,0)}var reverse1d=op({reverse1d_:reverse1d_});function reverse2d_(x,axis){var $x=convertToTensor(x,"x","reverse");assert($x.rank===2,function(){return"Error in reverse2D: x must be rank 2 but got rank "+$x.rank+"."});return reverse($x,axis)}var reverse2d=op({reverse2d_:reverse2d_});function reverse3d_(x,axis){var $x=convertToTensor(x,"x","reverse");assert($x.rank===3,function(){return"Error in reverse3D: x must be rank 3 but got rank "+$x.rank+"."});return reverse($x,axis)}var reverse3d=op({reverse3d_:reverse3d_});function reverse4d_(x,axis){var $x=convertToTensor(x,"x","reverse");assert($x.rank===4,function(){return"Error in reverse4D: x must be rank 4 but got rank "+$x.rank+"."});return reverse($x,axis)}var reverse4d=op({reverse4d_:reverse4d_});function round_(x){var $x=convertToTensor(x,"x","round");var inputs={x:$x};return ENGINE.runKernel(Round,inputs)}var round=op({round_:round_});function rsqrt_(x){var $x=convertToTensor(x,"x","rsqrt","float32");var inputs={x:$x};return ENGINE.runKernel(Rsqrt,inputs)}var rsqrt=op({rsqrt_:rsqrt_});function scalar(value,dtype){if((isTypedArray(value)&&dtype!=="string"||Array.isArray(value))&&dtype!=="complex64"){throw new Error("Error creating a new Scalar: value must be a primitive "+"(number|boolean|string)")}if(dtype==="string"&&isTypedArray(value)&&!(value instanceof Uint8Array)){throw new Error("When making a scalar from encoded string, "+"the value must be `Uint8Array`.")}var shape=[];var inferredShape=[];return makeTensor(value,shape,inferredShape,dtype)}function selu_(x){var $x=convertToTensor(x,"x","selu");var inputs={x:$x};return ENGINE.runKernel(Selu,inputs)}var selu=op({selu_:selu_});function separableConv2d_(x,depthwiseFilter,pointwiseFilter,strides,pad,dilation,dataFormat){if(dilation===void 0){dilation=[1,1]}if(dataFormat===void 0){dataFormat="NHWC"}var $x=convertToTensor(x,"x","separableConv2d");var $depthwiseFilter=convertToTensor(depthwiseFilter,"depthwiseFilter","separableConv2d");var $pointwiseFilter=convertToTensor(pointwiseFilter,"pointwiseFilter","separableConv2d");var x4D=$x;var reshapedTo4D=false;if($x.rank===3){reshapedTo4D=true;x4D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2]])}if(dataFormat==="NCHW"){throw new Error("separableConv2d currently does not support dataFormat NCHW; only "+"NHWC is supported")}assert(x4D.rank===4,function(){return"Error in separableConv2d: input must be rank 4, but got "+("rank "+x4D.rank+".")});assert($depthwiseFilter.rank===4,function(){return"Error in separableConv2d: depthwise filter must be rank 4, but "+("got rank "+$depthwiseFilter.rank+".")});assert($pointwiseFilter.rank===4,function(){return"Error in separableConv2d: pointwise filter must be rank 4, but "+("got rank "+$depthwiseFilter.rank+".")});assert($pointwiseFilter.shape[0]===1,function(){return"Error in separableConv2d: the first dimension of pointwise filter "+(" must be 1, but got "+$pointwiseFilter.shape[0]+".")});assert($pointwiseFilter.shape[1]===1,function(){return"Error in separableConv2d: the second dimension of pointwise "+("filter must be 1, but got "+$pointwiseFilter.shape[1]+".")});var inChannels=$depthwiseFilter.shape[2];var channelMultiplier=$depthwiseFilter.shape[3];assert($pointwiseFilter.shape[2]===inChannels*channelMultiplier,function(){return"Error in separableConv2d: the third dimension of pointwise filter "+("must be "+inChannels*channelMultiplier+", ")+("but got "+$pointwiseFilter.shape[2]+".")});var depthwise=depthwiseConv2d$1(x4D,$depthwiseFilter,strides,pad,dataFormat,dilation);var pointwiseStride=1;var res=conv2d$1(depthwise,$pointwiseFilter,pointwiseStride,"valid",dataFormat);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return res}var separableConv2d=op({separableConv2d_:separableConv2d_});function setdiff1dAsync_(x,y){return __awaiter(this,void 0,void 0,function(){var $x,$y,xVals,yVals,ySet,outputSize,i,buffer,indices,i,p;return __generator(this,function(_a){switch(_a.label){case 0:$x=convertToTensor(x,"x","setdiff1d");$y=convertToTensor(y,"y","setdiff1d");assert($x.dtype===$y.dtype,function(){return"x and y should have the same dtype, but got x ("+$x.dtype+") and y ("+$y.dtype+")."});assert($x.rank===1,function(){return"x should be 1D tensor, but got x ("+$x.shape+")."});assert($y.rank===1,function(){return"y should be 1D tensor, but got y ("+$y.shape+")."});return[4,$x.data()];case 1:xVals=_a.sent();return[4,$y.data()];case 2:yVals=_a.sent();ySet=new Set(yVals);outputSize=0;for(i=0;i<xVals.length;i++){if(!ySet.has(xVals[i])){outputSize++}}buffer=new TensorBuffer([outputSize],$x.dtype);indices=new TensorBuffer([outputSize],"int32");for(i=0,p=0;i<xVals.length;i++){if(!ySet.has(xVals[i])){buffer.values[p]=xVals[i];indices.values[p]=i;p++}}return[2,[buffer.toTensor(),indices.toTensor()]]}})})}var setdiff1dAsync=setdiff1dAsync_;function sign_(x){var $x=convertToTensor(x,"x","sign");var inputs={x:$x};return ENGINE.runKernel(Sign,inputs)}var sign=op({sign_:sign_});function sin_(x){var $x=convertToTensor(x,"x","sin","float32");var inputs={x:$x};return ENGINE.runKernel(Sin,inputs)}var sin=op({sin_:sin_});function sinh_(x){var $x=convertToTensor(x,"x","sinh");var inputs={x:$x};return ENGINE.runKernel(Sinh,inputs)}var sinh=op({sinh_:sinh_});function slice1d_(x,begin,size){var $x=convertToTensor(x,"x","slice1d");assert($x.rank===1,function(){return"slice1d expects a rank-1 tensor, but got a rank-"+$x.rank+" tensor"});return slice($x,[begin],[size])}var slice1d=op({slice1d_:slice1d_});function slice2d_(x,begin,size){var $x=convertToTensor(x,"x","slice2d");assert($x.rank===2,function(){return"slice2d expects a rank-2 tensor, but got a rank-"+$x.rank+" tensor"});return slice($x,begin,size)}var slice2d=op({slice2d_:slice2d_});function slice3d_(x,begin,size){var $x=convertToTensor(x,"x","slice3d");assert($x.rank===3,function(){return"slice3d expects a rank-3 tensor, but got a rank-"+$x.rank+" tensor"});return slice($x,begin,size)}var slice3d=op({slice3d_:slice3d_});function slice4d_(x,begin,size){var $x=convertToTensor(x,"x","slice4d");assert($x.rank===4,function(){return"slice4d expects a rank-4 tensor, but got a rank-"+$x.rank+" tensor"});return slice($x,begin,size)}var slice4d=op({slice4d_:slice4d_});function softmax_(logits,dim){if(dim===void 0){dim=-1}var $logits=convertToTensor(logits,"logits","softmax","float32");if(dim===-1){dim=$logits.rank-1}if(dim!==$logits.rank-1){throw Error("Softmax along a non-last dimension is not yet supported. "+("Logits was rank "+$logits.rank+" and dim was "+dim))}var inputs={logits:$logits};var attrs={dim:dim};return ENGINE.runKernel(Softmax,inputs,attrs)}var softmax=op({softmax_:softmax_});function fft_(input){assert(input.dtype==="complex64",function(){return"The dtype for tf.spectral.fft() must be complex64 "+("but got "+input.dtype+".")});var inputs={input:input};return ENGINE.runKernel(FFT,inputs)}var fft=op({fft_:fft_});function ifft_(input){assert(input.dtype==="complex64",function(){return"The dtype for tf.spectral.ifft() must be complex64 "+("but got "+input.dtype+".")});var inputs={input:input};return ENGINE.runKernel(IFFT,inputs)}var ifft=op({ifft_:ifft_});function irfft_(input){var innerDimensionSize=input.shape[input.shape.length-1];var batch=input.size/innerDimensionSize;var ret;if(innerDimensionSize<=2){var complexInput=reshape(input,[batch,innerDimensionSize]);ret=ifft(complexInput)}else{var outputShape=[batch,2*(innerDimensionSize-1)];var realInput=reshape(real(input),[batch,innerDimensionSize]);var imagInput=reshape(imag(input),[batch,innerDimensionSize]);var realConjugate=reverse(slice(realInput,[0,1],[batch,innerDimensionSize-2]),1);var imagConjugate=mul(reverse(slice(imagInput,[0,1],[batch,innerDimensionSize-2]),1),scalar(-1));var r=concat([realInput,realConjugate],1);var i=concat([imagInput,imagConjugate],1);var complexInput=reshape(complex(r,i),[outputShape[0],outputShape[1]]);ret=ifft(complexInput)}ret=real(ret);if(input.rank===3&&input.shape[0]!==0){var temp=ret;var batch_1=input.shape[0];ret=reshape(ret,[batch_1,ret.shape[0]/batch_1,ret.shape[1]]);temp.dispose()}return ret}var irfft=op({irfft_:irfft_});function split_(x,numOrSizeSplits,axis){if(axis===void 0){axis=0}var $x=convertToTensor(x,"x","split");var inputs={x:$x};var attr={numOrSizeSplits:numOrSizeSplits,axis:axis};return ENGINE.runKernel(SplitV,inputs,attr)}var split=op({split_:split_});function rfft_(input,fftLength){assert(input.dtype==="float32",function(){return"The dtype for rfft() must be real value but got "+input.dtype});var innerDimensionSize=input.shape[input.shape.length-1];var batch=input.size/innerDimensionSize;var adjustedInput;if(fftLength!=null&&fftLength<innerDimensionSize){var begin=input.shape.map(function(v){return 0});var size=input.shape.map(function(v){return v});size[input.shape.length-1]=fftLength;adjustedInput=slice(input,begin,size);innerDimensionSize=fftLength}else if(fftLength!=null&&fftLength>innerDimensionSize){var zerosShape=input.shape.map(function(v){return v});zerosShape[input.shape.length-1]=fftLength-innerDimensionSize;adjustedInput=concat([input,zeros(zerosShape)],input.shape.length-1);innerDimensionSize=fftLength}else{adjustedInput=input}var zerosInput=zerosLike(adjustedInput);var complexInput=reshape(complex(adjustedInput,zerosInput),[batch,innerDimensionSize]);var ret=fft(complexInput);var half=Math.floor(innerDimensionSize/2)+1;var realValues=real(ret);var imagValues=imag(ret);var realComplexConjugate=split(realValues,[half,innerDimensionSize-half],realValues.shape.length-1);var imagComplexConjugate=split(imagValues,[half,innerDimensionSize-half],imagValues.shape.length-1);var outputShape=adjustedInput.shape.slice();outputShape[adjustedInput.shape.length-1]=half;return reshape(complex(realComplexConjugate[0],imagComplexConjugate[0]),outputShape)}var rfft=op({rfft_:rfft_});function sqrt_(x){var $x=convertToTensor(x,"x","sqrt","float32");var inputs={x:$x};return ENGINE.runKernel(Sqrt,inputs)}var sqrt=op({sqrt_:sqrt_});function squaredDifference_(a,b){var _a;var $a=convertToTensor(a,"a","squaredDifference");var $b=convertToTensor(b,"b","squaredDifference");_a=__read(makeTypesMatch($a,$b),2),$a=_a[0],$b=_a[1];assertAndGetBroadcastShape($a.shape,$b.shape);var inputs={a:$a,b:$b};var attrs={};return ENGINE.runKernel(SquaredDifference,inputs,attrs)}var squaredDifference=op({squaredDifference_:squaredDifference_});function squeeze_(x,axis){var $x=convertToTensor(x,"x","squeeze");return reshape($x,squeezeShape($x.shape,axis).newShape)}var squeeze=op({squeeze_:squeeze_});function stack_(tensors,axis){if(axis===void 0){axis=0}var $tensors=convertToTensorArray(tensors,"tensors","stack","string_or_numeric");assert($tensors.length>=1,function(){return"Pass at least one tensor to tf.stack"});if($tensors.length>0){assert(axis<=$tensors[0].rank,function(){return"Axis must be <= rank of the tensor"})}var inputs=$tensors;var attrs={axis:axis};return ENGINE.runKernel(Pack,inputs,attrs)}var stack=op({stack_:stack_});function step_(x,alpha){if(alpha===void 0){alpha=0}var $x=convertToTensor(x,"x","step");var inputs={x:$x};var attrs={alpha:alpha};return ENGINE.runKernel(Step,inputs,attrs)}var step=op({step_:step_});function stridedSlice_(x,begin,end,strides,beginMask,endMask,ellipsisMask,newAxisMask,shrinkAxisMask){if(beginMask===void 0){beginMask=0}if(endMask===void 0){endMask=0}if(ellipsisMask===void 0){ellipsisMask=0}if(newAxisMask===void 0){newAxisMask=0}if(shrinkAxisMask===void 0){shrinkAxisMask=0}var $x=convertToTensor(x,"x","stridedSlice","string_or_numeric");var inputs={x:$x};var attrs={begin:begin,end:end,strides:strides,beginMask:beginMask,endMask:endMask,ellipsisMask:ellipsisMask,newAxisMask:newAxisMask,shrinkAxisMask:shrinkAxisMask};return ENGINE.runKernel(StridedSlice,inputs,attrs)}var stridedSlice=op({stridedSlice_:stridedSlice_});function tan_(x){var $x=convertToTensor(x,"x","tan","float32");var inputs={x:$x};return ENGINE.runKernel(Tan,inputs)}var tan=op({tan_:tan_});function tensor1d(values,dtype){assertNonNull(values);var inferredShape=inferShape(values,dtype);if(inferredShape.length!==1){throw new Error("tensor1d() requires values to be a flat/TypedArray")}var shape=null;return makeTensor(values,shape,inferredShape,dtype)}function tensor2d(values,shape,dtype){assertNonNull(values);if(shape!=null&&shape.length!==2){throw new Error("tensor2d() requires shape to have two numbers")}var inferredShape=inferShape(values,dtype);if(inferredShape.length!==2&&inferredShape.length!==1){throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray")}if(inferredShape.length===1&&shape==null){throw new Error("tensor2d() requires shape to be provided when `values` "+"are a flat/TypedArray")}return makeTensor(values,shape,inferredShape,dtype)}function tensor4d(values,shape,dtype){assertNonNull(values);if(shape!=null&&shape.length!==4){throw new Error("tensor4d() requires shape to have four numbers")}var inferredShape=inferShape(values,dtype);if(inferredShape.length!==4&&inferredShape.length!==1){throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray")}if(inferredShape.length===1&&shape==null){throw new Error("tensor4d() requires shape to be provided when `values` "+"are a flat array")}return makeTensor(values,shape,inferredShape,dtype)}function tensor5d(values,shape,dtype){assertNonNull(values);if(shape!=null&&shape.length!==5){throw new Error("tensor5d() requires shape to have five numbers")}var inferredShape=inferShape(values,dtype);if(inferredShape.length!==5&&inferredShape.length!==1){throw new Error("tensor5d() requires values to be "+"number[][][][][] or flat/TypedArray")}if(inferredShape.length===1&&shape==null){throw new Error("tensor5d() requires shape to be provided when `values` "+"are a flat array")}return makeTensor(values,shape,inferredShape,dtype)}function tensor6d(values,shape,dtype){assertNonNull(values);if(shape!=null&&shape.length!==6){throw new Error("tensor6d() requires shape to have six numbers")}var inferredShape=inferShape(values,dtype);if(inferredShape.length!==6&&inferredShape.length!==1){throw new Error("tensor6d() requires values to be number[][][][][][] or "+"flat/TypedArray")}if(inferredShape.length===1&&shape==null){throw new Error("tensor6d() requires shape to be provided when `values` "+"are a flat array")}shape=shape||inferredShape;return makeTensor(values,shape,inferredShape,dtype)}function topk_(x,k,sorted){if(k===void 0){k=1}if(sorted===void 0){sorted=true}var $x=convertToTensor(x,"x","topk");if($x.rank===0){throw new Error("topk() expects the input to be of rank 1 or higher")}var lastDim=$x.shape[$x.shape.length-1];if(k<0){throw new Error("'k' passed to topk() must be >= 0 but got "+k)}if(k>lastDim){throw new Error("'k' passed to topk() must be <= the last dimension ("+lastDim+") "+("but got "+k))}var inputs={x:$x};var attrs={k:k,sorted:sorted};var _a=__read(ENGINE.runKernel(TopK,inputs,attrs),2),values=_a[0],indices=_a[1];return{values:values,indices:indices}}var topk=op({topk_:topk_});function truncatedNormal_(shape,mean,stdDev,dtype,seed){if(mean===void 0){mean=0}if(stdDev===void 0){stdDev=1}if(dtype!=null&&dtype==="bool"){throw new Error("Unsupported data type $ { dtype }")}var randGauss=new MPRandGauss(mean,stdDev,dtype,true,seed);var res=buffer(shape,dtype);for(var i=0;i<res.values.length;i++){res.values[i]=randGauss.nextValue()}return res.toTensor()}var truncatedNormal=op({truncatedNormal_:truncatedNormal_});function unique_(x,axis){if(axis===void 0){axis=0}var $x=convertToTensor(x,"x","unique","string_or_numeric");assert($x.rank>0,function(){return"The input tensor must be at least 1D"});var inputs={x:$x};var attrs={axis:axis};var _a=__read(ENGINE.runKernel(Unique,inputs,attrs),2),values=_a[0],indices=_a[1];return{values:values,indices:indices}}var unique=op({unique_:unique_});function unsortedSegmentSum_(x,segmentIds,numSegments){var $x=convertToTensor(x,"x","unsortedSegmentSum");var $segmentIds=convertToTensor(segmentIds,"segmentIds","unsortedSegmentSum","int32");assert(isInt(numSegments),function(){return"numSegments must be of dtype int"});var inputs={x:$x,segmentIds:$segmentIds};var attrs={numSegments:numSegments};return ENGINE.runKernel(UnsortedSegmentSum,inputs,attrs)}var unsortedSegmentSum=op({unsortedSegmentSum_:unsortedSegmentSum_});function unstack_(x,axis){if(axis===void 0){axis=0}var $x=convertToTensor(x,"x","unstack","string_or_numeric");assert(axis>=-$x.shape.length&&axis<$x.shape.length,function(){return"Axis = "+axis+" is not in [-"+$x.shape.length+", "+$x.shape.length+")"});var inputs={value:$x};var attrs={axis:axis};return ENGINE.runKernel(Unpack,inputs,attrs)}var unstack=op({unstack_:unstack_});function variable(initialValue,trainable,name,dtype){if(trainable===void 0){trainable=true}return ENGINE.makeVariable(initialValue,trainable,name,dtype)}function whereImpl(condShape,condVals){var indices=[];for(var i=0;i<condVals.length;i++){if(condVals[i]){indices.push(i)}}var inBuffer=buffer(condShape,"int32");var out=buffer([indices.length,condShape.length],"int32");for(var i=0;i<indices.length;i++){var loc=inBuffer.indexToLoc(indices[i]);var offset=i*condShape.length;out.values.set(loc,offset)}return out.toTensor()}function whereAsync_(condition){return __awaiter(this,void 0,void 0,function(){var $condition,vals,res;return __generator(this,function(_a){switch(_a.label){case 0:$condition=convertToTensor(condition,"condition","whereAsync","bool");return[4,$condition.data()];case 1:vals=_a.sent();res=whereImpl($condition.shape,vals);if(condition!==$condition){$condition.dispose()}return[2,res]}})})}var whereAsync=whereAsync_;function booleanMaskAsync_(tensor,mask,axis){return __awaiter(this,void 0,void 0,function(){var $tensor,$mask,axisFrom,maskDim,tensorShape,leadingSize,i,targetTensorShape,reshapedTensor,reshapedMask,positivePositions,indices,res;return __generator(this,function(_a){switch(_a.label){case 0:$tensor=convertToTensor(tensor,"tensor","boolMask");$mask=convertToTensor(mask,"mask","boolMask","bool");axisFrom=axis==null?0:axis;maskDim=$mask.rank;tensorShape=$tensor.shape;assert(maskDim>0,function(){return"mask cannot be scalar"});assertShapesMatch(tensorShape.slice(axisFrom,axisFrom+maskDim),$mask.shape,"mask's shape must match the first K dimensions of tensor's shape,");leadingSize=1;for(i=axisFrom;i<axisFrom+maskDim;i++){leadingSize*=tensorShape[i]}targetTensorShape=tensorShape.slice(0,axisFrom).concat([leadingSize],tensorShape.slice(axisFrom+maskDim));reshapedTensor=reshape($tensor,targetTensorShape);reshapedMask=reshape($mask,[-1]);return[4,whereAsync(reshapedMask)];case 1:positivePositions=_a.sent();indices=squeeze(positivePositions,[1]);res=gather(reshapedTensor,indices,axisFrom);if(tensor!==$tensor){$tensor.dispose()}if(mask!==$mask){$mask.dispose()}indices.dispose();reshapedTensor.dispose();reshapedMask.dispose();positivePositions.dispose();return[2,res]}})})}var booleanMaskAsync=booleanMaskAsync_;function norm_(x,ord,axis,keepDims){if(ord===void 0){ord="euclidean"}if(axis===void 0){axis=null}if(keepDims===void 0){keepDims=false}x=convertToTensor(x,"x","norm");var norm=normImpl(x,ord,axis);var keepDimsShape=norm.shape;if(keepDims){var axes=parseAxisParam(axis,x.shape);keepDimsShape=expandShapeToKeepDim(norm.shape,axes)}return reshape(norm,keepDimsShape)}function normImpl(x,p,axis){if(axis===void 0){axis=null}if(x.rank===0){return abs(x)}if(x.rank!==1&&axis===null){return normImpl(reshape(x,[-1]),p,axis)}if(x.rank===1||typeof axis==="number"||Array.isArray(axis)&&axis.length===1){if(p===1){return sum(abs(x),axis)}if(p===Infinity){return max(abs(x),axis)}if(p===-Infinity){return min(abs(x),axis)}if(p==="euclidean"||p===2){return sqrt(sum(pow(abs(x),scalar(2,"int32")),axis))}throw new Error("Error in norm: invalid ord value: "+p)}if(Array.isArray(axis)&&axis.length===2){if(p===1){return max(sum(abs(x),axis[0]),axis[1]-1)}if(p===Infinity){return max(sum(abs(x),axis[1]),axis[0])}if(p===-Infinity){return min(sum(abs(x),axis[1]),axis[0])}if(p==="fro"||p==="euclidean"){return sqrt(sum(square(x),axis))}throw new Error("Error in norm: invalid ord value: "+p)}throw new Error("Error in norm: invalid axis: "+axis)}var norm=op({norm_:norm_});function movingAverage_(v,x,decay,step,zeroDebias){if(zeroDebias===void 0){zeroDebias=true}var $v=convertToTensor(v,"v","movingAverage");var $x=convertToTensor(x,"x","movingAverage");var $decay=convertToTensor(decay,"decay","movingAverage");assertTypesMatch($v,$x);assert(arraysEqual($v.shape,$x.shape),function(){return"Shape mismatch in v and x"});var one=scalar(1);var oneMinusDecay=sub(one,$decay);var update=mul(sub($x,$v),oneMinusDecay);if(zeroDebias){assert(step!=null,function(){return"When using zeroDebias: true, step is required."});var $step=convertToTensor(step,"step","movingAverage");update=div(update,sub(one,pow($decay,$step)))}return add($v,update)}var movingAverage=op({movingAverage_:movingAverage_});function scatterND_(indices,updates,shape){var $indices=convertToTensor(indices,"indices","scatterND","int32");var $updates=convertToTensor(updates,"updates","scatterND");validateInput$1($updates,$indices,shape);var inputs={indices:$indices,updates:$updates};var attrs={shape:shape};return ENGINE.runKernel(ScatterNd,inputs,attrs)}var scatterND=op({scatterND_:scatterND_});function validateInput(sparseIndices,sparseValues,outputShape,defaultValues){if(sparseIndices.dtype!=="int32"){throw new Error("tf.sparseToDense() expects the indices to be int32 type,"+(" but the dtype was "+sparseIndices.dtype+"."))}if(sparseIndices.rank>2){throw new Error("sparseIndices should be a scalar, vector, or matrix,"+(" but got shape "+sparseIndices.shape+"."))}var numElems=sparseIndices.rank>0?sparseIndices.shape[0]:1;var numDims=sparseIndices.rank>1?sparseIndices.shape[1]:1;if(outputShape.length!==numDims){throw new Error("outputShape has incorrect number of elements:,"+(" "+outputShape.length+", should be: "+numDims+"."))}var numValues=sparseValues.size;if(!(sparseValues.rank===0||sparseValues.rank===1&&numValues===numElems)){throw new Error("sparseValues has incorrect shape "+(sparseValues.shape+", should be [] or ["+numElems+"]"))}if(sparseValues.dtype!==defaultValues.dtype){throw new Error("sparseValues.dtype must match defaultValues.dtype")}}function sparseToDense_(sparseIndices,sparseValues,outputShape,defaultValue){if(defaultValue===void 0){defaultValue=0}var $sparseIndices=convertToTensor(sparseIndices,"sparseIndices","sparseToDense","int32");var $sparseValues=convertToTensor(sparseValues,"sparseValues","sparseToDense");var $defaultValue=convertToTensor(defaultValue,"defaultValue","sparseToDense",$sparseValues.dtype);validateInput($sparseIndices,$sparseValues,outputShape,$defaultValue);var inputs={sparseIndices:$sparseIndices,sparseValues:$sparseValues,defaultValue:$defaultValue};var attrs={outputShape:outputShape};return ENGINE.runKernel(SparseToDense,inputs,attrs)}var sparseToDense=op({sparseToDense_:sparseToDense_});function gatherND_(x,indices){var $indices=convertToTensor(indices,"indices","gatherND","int32");var $x=convertToTensor(x,"x","gatherND","string_or_numeric");var inputs={params:$x,indices:$indices};return ENGINE.runKernel(GatherNd,inputs)}var gatherND=op({gatherND_:gatherND_});function getNoiseShape(x,noiseShape){if(noiseShape==null){return x.shape.slice()}if(arraysEqual(x.shape,noiseShape)){return noiseShape}if(x.shape.length===noiseShape.length){var newDimension=[];for(var i=0;i<x.shape.length;i++){if(noiseShape[i]==null&&x.shape[i]!=null){newDimension.push(x.shape[i])}else{newDimension.push(noiseShape[i])}}return newDimension}return noiseShape}function dropout_(x,rate,noiseShape,seed){var $x=convertToTensor(x,"x","dropout");assert($x.dtype==="float32",function(){return"x has to be a floating point tensor since it's going to be "+("scaled, but got a "+$x.dtype+" tensor instead.")});assert(rate>=0&&rate<1,function(){return"rate must be a float in the range [0, 1), but got "+rate+"."});if(rate===0){return x instanceof Tensor?$x.clone():$x}var $noiseShape=getNoiseShape($x,noiseShape);var keepProb=1-rate;var multiplier=div(floor(add(randomUniform($noiseShape,0,1,"float32",seed),keepProb)),keepProb);return mul($x,multiplier)}var dropout=op({dropout_:dropout_});function enclosingPowerOfTwo(value){return Math.floor(Math.pow(2,Math.ceil(Math.log(value)/Math.log(2))))}function cosineWindow(windowLength,a,b){var even=1-windowLength%2;var newValues=new Float32Array(windowLength);for(var i=0;i<windowLength;++i){var cosArg=2*Math.PI*i/(windowLength+even-1);newValues[i]=a-b*Math.cos(cosArg)}return tensor1d(newValues,"float32")}function inTopKAsync_(predictions,targets,k){if(k===void 0){k=1}return __awaiter(this,void 0,void 0,function(){var $predictions,$targets,lastDim,predictionsVals,targetsVals,_a,batch,size,precision,b,offset,vals,valAndInd,i,i;return __generator(this,function(_b){switch(_b.label){case 0:$predictions=convertToTensor(predictions,"predictions","inTopK");$targets=convertToTensor(targets,"targets","inTopK");assert($predictions.rank>1,function(){return"inTopK() expects the predictions to be of rank 2 or higher, "+("but got "+$predictions.rank)});assert($predictions.rank-1===$targets.rank,function(){return"predictions rank should be 1 larger than "+"targets rank, but got predictions rank "+($predictions.rank+" and targets rank "+$targets.rank)});assertShapesMatch($predictions.shape.slice(0,$predictions.shape.length-1),$targets.shape,"predictions's shape should be align with the targets' shape, "+"except the last dimension.");lastDim=$predictions.shape[$predictions.shape.length-1];assert(k>0&&k<=lastDim,function(){return"'k' passed to inTopK() must be > 0 && <= the predictions last "+("dimension ("+lastDim+"), but got "+k)});return[4,$predictions.data()];case 1:predictionsVals=_b.sent();return[4,$targets.data()];case 2:targetsVals=_b.sent();_a=__read([predictionsVals.length/lastDim,lastDim],2),batch=_a[0],size=_a[1];precision=getTypedArrayFromDType("bool",batch);for(b=0;b<batch;b++){offset=b*size;vals=predictionsVals.subarray(offset,offset+size);valAndInd=[];for(i=0;i<vals.length;i++){valAndInd.push({value:vals[i],index:i})}valAndInd.sort(function(a,b){return b.value-a.value});precision[b]=0;for(i=0;i<k;i++){if(valAndInd[i].index===targetsVals[b]){precision[b]=1;break}}}if(predictions!==$predictions){$predictions.dispose()}if(targets!==$targets){$targets.dispose()}return[2,tensor(precision,$targets.shape,"bool")]}})})}var inTopKAsync=inTopKAsync_;function conv2DBackpropFilter_(x,dy,filterShape,strides,pad,dataFormat,dimRoundingMode){if(dataFormat===void 0){dataFormat="NHWC"}var x4D=x;if(x.rank===3){x4D=reshape(x,[1,x.shape[0],x.shape[1],x.shape[2]])}var dy4D=dy;if(dy4D.rank===3){dy4D=reshape(dy,[1,dy.shape[0],dy.shape[1],dy.shape[2]])}assert(x4D.rank===4,function(){return"Error in conv2dDerFilter: input must be rank 4, but got shape "+(x4D.shape+".")});assert(dy4D.rank===4,function(){return"Error in conv2dDerFilter: dy must be rank 4, but got shape "+(dy4D.shape+".")});assert(filterShape.length===4,function(){return"Error in conv2dDerFilter: filterShape must be length 4, but got "+(filterShape+".")});var inDepth=dataFormat==="NHWC"?x4D.shape[3]:x4D.shape[1];var outDepth=dataFormat==="NHWC"?dy4D.shape[3]:dy4D.shape[1];assert(inDepth===filterShape[2],function(){return"Error in conv2dDerFilter: depth of input "+inDepth+") must "+("match input depth in filter ("+filterShape[2]+".")});assert(outDepth===filterShape[3],function(){return"Error in conv2dDerFilter: depth of dy ("+outDepth+") must "+("match output depth for filter ("+filterShape[3]+").")});if(dimRoundingMode!=null){assert(isInt(pad),function(){return"Error in conv2dDerFilter: pad must be an integer when using, "+("dimRoundingMode "+dimRoundingMode+" but got pad "+pad+".")})}var inputs={x:x4D,dy:dy4D};var attrs={strides:strides,pad:pad,dataFormat:dataFormat,dimRoundingMode:dimRoundingMode,filterShape:filterShape};return ENGINE.runKernel(Conv2DBackpropFilter,inputs,attrs)}var conv2DBackpropFilter=op({conv2DBackpropFilter_:conv2DBackpropFilter_});function getFusedDyActivation(dy,y,activation){if(activation==null||activation==="linear"){return dy}if(activation==="relu"){return mul(dy,step(y))}throw new Error("Cannot compute gradient for fused activation "+activation+".")}function getFusedBiasGradient(bias,dyActivation){var res=dyActivation;var reduceAxes=getReductionAxes(bias.shape,dyActivation.shape);if(reduceAxes.length>0){res=sum(res,reduceAxes)}return reshape(res,bias.shape)}function applyActivation(x,activation,preluActivationWeights,leakyreluAlpha){if(activation==="linear"){return x}else if(activation==="relu"){return relu(x)}else if(activation==="elu"){return elu(x)}else if(activation==="relu6"){return relu6(x)}else if(activation==="prelu"){return prelu(x,preluActivationWeights)}else if(activation==="leakyrelu"){return leakyRelu(x,leakyreluAlpha)}else if(activation==="sigmoid"){return sigmoid(x)}throw new Error("Unknown fused activation "+activation+".")}var shouldFuse=function(gradientDepth,activation){var gradientMode=gradientDepth>0;return!gradientMode||activation==="linear"};function fusedConv2d_(_a){var _b;var x=_a.x,filter=_a.filter,strides=_a.strides,pad=_a.pad,_c=_a.dataFormat,dataFormat=_c===void 0?"NHWC":_c,_d=_a.dilations,dilations=_d===void 0?[1,1]:_d,dimRoundingMode=_a.dimRoundingMode,bias=_a.bias,_e=_a.activation,activation=_e===void 0?"linear":_e,preluActivationWeights=_a.preluActivationWeights,leakyreluAlpha=_a.leakyreluAlpha;activation=activation||"linear";if(shouldFuse(ENGINE.state.gradientDepth,activation)===false){var result=conv2d$1(x,filter,strides,pad,dataFormat,dilations,dimRoundingMode);if(bias!=null){result=add(result,bias)}return applyActivation(result,activation,preluActivationWeights,leakyreluAlpha)}var $x=convertToTensor(x,"x","conv2d","float32");var $filter=convertToTensor(filter,"filter","conv2d","float32");var x4D=$x;var reshapedTo4D=false;if($x.rank===3){reshapedTo4D=true;x4D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2]])}assert(x4D.rank===4,function(){return"Error in fused conv2d: input must be rank 4, but got rank "+(x4D.rank+".")});assert($filter.rank===4,function(){return"Error in fused conv2d: filter must be rank 4, but got rank "+($filter.rank+".")});if(dimRoundingMode!=null){assert(isInt(pad),function(){return"Error in fused conv2d: pad must be an integer when using, "+("dimRoundingMode "+dimRoundingMode+" but got pad "+pad+".")})}assert(x4D.shape[3]===$filter.shape[2],function(){return"Error in conv2d: depth of input ("+x4D.shape[3]+") must match "+("input depth for filter "+$filter.shape[2]+".")});assert(eitherStridesOrDilationsAreOne(strides,dilations),function(){return"Error in conv2D: Either strides or dilations must be 1. "+("Got strides "+strides+" and dilations '"+dilations+"'")});assert(dataFormat==="NHWC",function(){return"Error in conv2d: got dataFormat of "+dataFormat+" but only NHWC is currently supported."});var convInfo=computeConv2DInfo(x4D.shape,$filter.shape,strides,dilations,pad,dimRoundingMode);var $bias;if(bias!=null){$bias=convertToTensor(bias,"bias","fused conv2d");_b=__read(makeTypesMatch($bias,$x),1),$bias=_b[0];assertAndGetBroadcastShape(convInfo.outShape,$bias.shape)}var $preluActivationWeights;if(preluActivationWeights!=null){$preluActivationWeights=convertToTensor(preluActivationWeights,"prelu weights","fused conv2d")}var grad=function(dy,saved){var _a=__read(saved,4),$filter=_a[0],x4D=_a[1],y=_a[2],$bias=_a[3];var dyActivation=getFusedDyActivation(dy,y,activation);assert(tupleValuesAreOne(dilations),function(){return"Error in gradient of fused conv2D: "+"dilation rates greater than 1 "+("are not yet supported in gradients. Got dilations '"+dilations+"'")});var xDer=conv2DBackpropInput(x4D.shape,dyActivation,$filter,strides,pad);var filterDer=conv2DBackpropFilter(x4D,dyActivation,$filter.shape,strides,pad);var der=[xDer,filterDer];if($bias!=null){var biasDer=getFusedBiasGradient($bias,dyActivation);der.push(biasDer)}return der};var inputs={x:x4D,filter:$filter,bias:$bias,preluActivationWeights:$preluActivationWeights};var attrs={strides:strides,pad:pad,dataFormat:dataFormat,dilations:dilations,dimRoundingMode:dimRoundingMode,activation:activation,leakyreluAlpha:leakyreluAlpha};if(bias==null){var customOp=customGrad(function(x4D,filter,save){var res=ENGINE.runKernel(FusedConv2D,inputs,attrs);save([filter,x4D,res]);if(reshapedTo4D){res=reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return{value:res,gradFunc:grad}});return customOp(x4D,$filter)}else{var customOpWithBias=customGrad(function(x4D,filter,bias,save){var res=ENGINE.runKernel(FusedConv2D,inputs,attrs);save([filter,x4D,res,bias]);if(reshapedTo4D){res=reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return{value:res,gradFunc:grad}});return customOpWithBias(x4D,$filter,$bias)}}var conv2d=op({fusedConv2d_:fusedConv2d_});function depthwiseConv2dNativeBackpropFilter_(x,dy,filterShape,strides,pad,dilations,dimRoundingMode){if(dilations===void 0){dilations=[1,1]}var x4D=x;if(x.rank===3){x4D=reshape(x,[1,x.shape[0],x.shape[1],x.shape[2]])}var dy4D=dy;if(dy4D.rank===3){dy4D=reshape(dy,[1,dy.shape[0],dy.shape[1],dy.shape[2]])}var inputs={x:x4D,dy:dy4D};var attrs={strides:strides,pad:pad,dimRoundingMode:dimRoundingMode,dilations:dilations,filterShape:filterShape};return ENGINE.runKernel(DepthwiseConv2dNativeBackpropFilter,inputs,attrs)}var depthwiseConv2dNativeBackpropFilter=op({depthwiseConv2dNativeBackpropFilter_:depthwiseConv2dNativeBackpropFilter_});function depthwiseConv2dNativeBackpropInput_(xShape,dy,filter,strides,pad,dilations,dimRoundingMode){if(dilations===void 0){dilations=[1,1]}var dy4D=dy;var reshapedTo4D=false;if(dy.rank===3){reshapedTo4D=true;dy4D=reshape(dy,[1,dy.shape[0],dy.shape[1],dy.shape[2]])}var inputs={dy:dy4D,filter:filter};var attrs={strides:strides,pad:pad,dimRoundingMode:dimRoundingMode,dilations:dilations,inputShape:xShape};var res=ENGINE.runKernel(DepthwiseConv2dNativeBackpropInput,inputs,attrs);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return res}var depthwiseConv2dNativeBackpropInput=op({depthwiseConv2dNativeBackpropInput_:depthwiseConv2dNativeBackpropInput_});function fusedDepthwiseConv2d_(_a){var _b;var x=_a.x,filter=_a.filter,strides=_a.strides,pad=_a.pad,_c=_a.dataFormat,dataFormat=_c===void 0?"NHWC":_c,_d=_a.dilations,dilations=_d===void 0?[1,1]:_d,dimRoundingMode=_a.dimRoundingMode,bias=_a.bias,_e=_a.activation,activation=_e===void 0?"linear":_e,preluActivationWeights=_a.preluActivationWeights,leakyreluAlpha=_a.leakyreluAlpha;if(shouldFuse(ENGINE.state.gradientDepth,activation)===false){var result=depthwiseConv2d$1(x,filter,strides,pad,dataFormat,dilations,dimRoundingMode);if(bias!=null){result=add(result,bias)}return applyActivation(result,activation,preluActivationWeights,leakyreluAlpha)}var $x=convertToTensor(x,"x","depthwiseConv2d","float32");var $filter=convertToTensor(filter,"filter","depthwiseConv2d","float32");var x4D=$x;var reshapedTo4D=false;if($x.rank===3){reshapedTo4D=true;x4D=reshape($x,[1,$x.shape[0],$x.shape[1],$x.shape[2]])}assert(x4D.rank===4,function(){return"Error in fused depthwiseConv2d: input must be rank 4, but got "+("rank "+x4D.rank+".")});assert($filter.rank===4,function(){return"Error in fused depthwiseConv2d: filter must be rank 4, "+("but got rank "+$filter.rank+".")});assert(x4D.shape[3]===$filter.shape[2],function(){return"Error in fused depthwiseConv2d: number of input channels "+("("+x4D.shape[3]+") must match the inChannels dimension in ")+("filter "+$filter.shape[2]+".")});if(dilations==null){dilations=[1,1]}assert(eitherStridesOrDilationsAreOne(strides,dilations),function(){return"Error in fused depthwiseConv2d: Either strides or dilations must "+("be 1. Got strides "+strides+" and dilations '"+dilations+"'")});if(dimRoundingMode!=null){assert(isInt(pad),function(){return"Error in fused depthwiseConv2d: pad must be an integer when "+("using dimRoundingMode "+dimRoundingMode+" but got pad "+pad+".")})}var convInfo=computeConv2DInfo(x4D.shape,$filter.shape,strides,dilations,pad,dimRoundingMode,true);var $bias;if(bias!=null){$bias=convertToTensor(bias,"bias","fused conv2d");_b=__read(makeTypesMatch($bias,$x),1),$bias=_b[0];assertAndGetBroadcastShape(convInfo.outShape,$bias.shape)}var $preluActivationWeights;if(preluActivationWeights!=null){$preluActivationWeights=convertToTensor(preluActivationWeights,"prelu weights","fused depthwiseConv2d")}var grad=function(dy,saved){assert(tupleValuesAreOne(dilations),function(){return"Error in gradient of fused depthwiseConv2d: dilation rates "+"greater than 1 are not yet supported. Got dilations "+("'"+dilations+"'")});var _a=__read(saved,4),$filter=_a[0],x4D=_a[1],y=_a[2],bias=_a[3];var dyActivation=getFusedDyActivation(dy,y,activation);var xDer=depthwiseConv2dNativeBackpropInput(x4D.shape,dyActivation,$filter,strides,pad,dilations,dimRoundingMode);var filterDer=depthwiseConv2dNativeBackpropFilter(x4D,dyActivation,$filter.shape,strides,pad,dilations,dimRoundingMode);if(bias!=null){var biasDer=getFusedBiasGradient($bias,dyActivation);return[xDer,filterDer,biasDer]}return[xDer,filterDer]};var inputs={x:x4D,filter:$filter,bias:$bias,preluActivationWeights:$preluActivationWeights};var attrs={strides:strides,pad:pad,dataFormat:dataFormat,dilations:dilations,dimRoundingMode:dimRoundingMode,activation:activation,leakyreluAlpha:leakyreluAlpha};if(bias==null){var customOp=customGrad(function(x4D,filter,save){var res=ENGINE.runKernel(FusedDepthwiseConv2D,inputs,attrs);save([filter,x4D,res]);if(reshapedTo4D){res=reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return{value:res,gradFunc:grad}});return customOp(x4D,$filter)}else{var customOpWithBias=customGrad(function(x4D,filter,bias,save){var res=ENGINE.runKernel(FusedDepthwiseConv2D,inputs,attrs);save([filter,x4D,res,bias]);if(reshapedTo4D){res=reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return{value:res,gradFunc:grad}});return customOpWithBias(x4D,$filter,$bias)}}var depthwiseConv2d=op({fusedDepthwiseConv2d_:fusedDepthwiseConv2d_});function fusedMatMul_(_a){var _b,_c;var a=_a.a,b=_a.b,_d=_a.transposeA,transposeA=_d===void 0?false:_d,_e=_a.transposeB,transposeB=_e===void 0?false:_e,bias=_a.bias,_f=_a.activation,activation=_f===void 0?"linear":_f,preluActivationWeights=_a.preluActivationWeights,leakyreluAlpha=_a.leakyreluAlpha;if(shouldFuse(ENGINE.state.gradientDepth,activation)===false){var result=matMul$1(a,b,transposeA,transposeB);if(bias!=null){result=add(result,bias)}return applyActivation(result,activation,preluActivationWeights,leakyreluAlpha)}var $a=convertToTensor(a,"a","fused matMul");var $b=convertToTensor(b,"b","fused matMul");_b=__read(makeTypesMatch($a,$b),2),$a=_b[0],$b=_b[1];var innerShapeA=transposeA?$a.shape[$a.rank-2]:$a.shape[$a.rank-1];var innerShapeB=transposeB?$b.shape[$b.rank-1]:$b.shape[$b.rank-2];var outerShapeA=transposeA?$a.shape[$a.rank-1]:$a.shape[$a.rank-2];var outerShapeB=transposeB?$b.shape[$b.rank-2]:$b.shape[$b.rank-1];var outerDimsA=$a.shape.slice(0,-2);var outerDimsB=$b.shape.slice(0,-2);var batchDimA=sizeFromShape(outerDimsA);var batchDimB=sizeFromShape(outerDimsB);assert($a.rank>=2&&$b.rank>=2&&$a.rank===$b.rank,function(){return"Error in fused matMul: inputs must have the same rank of at "+("least 2, got ranks "+$a.rank+" and "+$b.rank+".")});assert(arraysEqual(outerDimsA,outerDimsB),function(){return"Error in fused matMul: outer dimensions ("+outerDimsA+") and ("+(outerDimsB+") of Tensors with shapes "+$a.shape+" and ")+($b.shape+" must match.")});assert(innerShapeA===innerShapeB,function(){return"Error in fused matMul: inner shapes ("+innerShapeA+") and ("+(innerShapeB+") of Tensors with shapes "+$a.shape+" and ")+($b.shape+" and transposeA="+transposeA)+(" and transposeB="+transposeB+" must match.")});var outShape=$a.shape.slice(0,-2).concat([outerShapeA,outerShapeB]);var a3D=transposeA?reshape($a,[batchDimA,innerShapeA,outerShapeA]):reshape($a,[batchDimA,outerShapeA,innerShapeA]);var b3D=transposeB?reshape($b,[batchDimB,outerShapeB,innerShapeB]):reshape($b,[batchDimB,innerShapeB,outerShapeB]);var $bias;if(bias!=null){$bias=convertToTensor(bias,"bias","fused matMul");_c=__read(makeTypesMatch($bias,$a),1),$bias=_c[0];assertAndGetBroadcastShape(outShape,$bias.shape)}var $preluActivationWeights;if(preluActivationWeights!=null){$preluActivationWeights=convertToTensor(preluActivationWeights,"prelu weights","fused matMul")}var grad=function(dy,saved){var _a=__read(saved,4),a3D=_a[0],b3D=_a[1],y=_a[2],$bias=_a[3];var dyActivation=getFusedDyActivation(reshape(dy,y.shape),y,activation);var aDer;var bDer;if(!transposeA&&!transposeB){aDer=matMul$1(dyActivation,b3D,false,true);bDer=matMul$1(a3D,dyActivation,true,false)}else if(!transposeA&&transposeB){aDer=matMul$1(dyActivation,b3D,false,false);bDer=matMul$1(dyActivation,a3D,true,false)}else if(transposeA&&!transposeB){aDer=matMul$1(b3D,dyActivation,false,true);bDer=matMul$1(a3D,dyActivation,false,false)}else{aDer=matMul$1(b3D,dyActivation,true,true);bDer=matMul$1(dyActivation,a3D,true,true)}if(bias!=null){var biasDer=getFusedBiasGradient($bias,dyActivation);return[aDer,bDer,biasDer]}else{return[aDer,bDer]}};var inputs={a:a3D,b:b3D,bias:$bias,preluActivationWeights:$preluActivationWeights};var attrs={transposeA:transposeA,transposeB:transposeB,activation:activation,leakyreluAlpha:leakyreluAlpha};if(bias==null){var customOp=customGrad(function(a3D,b3D,save){var res=ENGINE.runKernel(_FusedMatMul,inputs,attrs);save([a3D,b3D,res]);return{value:reshape(res,outShape),gradFunc:grad}});return customOp(a3D,b3D)}else{var customOpWithBias=customGrad(function(a3D,b3D,$bias,save){var res=ENGINE.runKernel(_FusedMatMul,inputs,attrs);save([a3D,b3D,res,$bias]);return{value:reshape(res,outShape),gradFunc:grad}});return customOpWithBias(a3D,b3D,$bias)}}var matMul=op({fusedMatMul_:fusedMatMul_});var fused_ops={__proto__:null,conv2d:conv2d,depthwiseConv2d:depthwiseConv2d,matMul:matMul};function hammingWindow_(windowLength){return cosineWindow(windowLength,.54,.46)}var hammingWindow=op({hammingWindow_:hammingWindow_});function hannWindow_(windowLength){return cosineWindow(windowLength,.5,.5)}var hannWindow=op({hannWindow_:hannWindow_});function frame_(signal,frameLength,frameStep,padEnd,padValue){if(padEnd===void 0){padEnd=false}if(padValue===void 0){padValue=0}var start=0;var output=[];while(start+frameLength<=signal.size){output.push(slice(signal,start,frameLength));start+=frameStep}if(padEnd){while(start<signal.size){var padLen=start+frameLength-signal.size;var pad=concat([slice(signal,start,frameLength-padLen),fill([padLen],padValue)]);output.push(pad);start+=frameStep}}if(output.length===0){return tensor2d([],[0,frameLength])}return reshape(concat(output),[output.length,frameLength])}var frame=op({frame_:frame_});function stft_(signal,frameLength,frameStep,fftLength,windowFn){if(windowFn===void 0){windowFn=hannWindow}if(fftLength==null){fftLength=enclosingPowerOfTwo(frameLength)}var framedSignal=frame(signal,frameLength,frameStep);var windowedSignal=mul(framedSignal,windowFn(frameLength));return rfft(windowedSignal,fftLength)}var stft=op({stft_:stft_});function cropAndResize_(image,boxes,boxInd,cropSize,method,extrapolationValue){if(method===void 0){method="bilinear"}if(extrapolationValue===void 0){extrapolationValue=0}var $image=convertToTensor(image,"image","cropAndResize");var $boxes=convertToTensor(boxes,"boxes","cropAndResize","float32");var $boxInd=convertToTensor(boxInd,"boxInd","cropAndResize","int32");var numBoxes=$boxes.shape[0];assert($image.rank===4,function(){return"Error in cropAndResize: image must be rank 4,"+("but got rank "+$image.rank+".")});assert($boxes.rank===2&&$boxes.shape[1]===4,function(){return"Error in cropAndResize: boxes must be have size ["+numBoxes+",4] "+("but had shape "+$boxes.shape+".")});assert($boxInd.rank===1&&$boxInd.shape[0]===numBoxes,function(){return"Error in cropAndResize: boxInd must be have size ["+numBoxes+"] "+("but had shape "+$boxes.shape+".")});assert(cropSize.length===2,function(){return"Error in cropAndResize: cropSize must be of length 2, but got "+("length "+cropSize.length+".")});assert(cropSize[0]>=1&&cropSize[1]>=1,function(){return"cropSize must be atleast [1,1], but was "+cropSize});assert(method==="bilinear"||method==="nearest",function(){return"method must be bilinear or nearest, but was "+method});var inputs={image:$image,boxes:$boxes,boxInd:$boxInd};var attrs={method:method,extrapolationValue:extrapolationValue,cropSize:cropSize};var res=ENGINE.runKernel(CropAndResize,inputs,attrs);return res}var cropAndResize=op({cropAndResize_:cropAndResize_});function flipLeftRight_(image){var $image=convertToTensor(image,"image","flipLeftRight","float32");assert($image.rank===4,function(){return"Error in flipLeftRight: image must be rank 4,"+("but got rank "+$image.rank+".")});var inputs={image:$image};var res=ENGINE.runKernel(FlipLeftRight,inputs,{});return res}var flipLeftRight=op({flipLeftRight_:flipLeftRight_});function grayscaleToRGB_(image){var $image=convertToTensor(image,"image","grayscaleToRGB");var lastDimsIdx=$image.rank-1;var lastDims=$image.shape[lastDimsIdx];assert($image.rank>=2,function(){return"Error in grayscaleToRGB: images must be at least rank 2, "+("but got rank "+$image.rank+".")});assert(lastDims===1,function(){return"Error in grayscaleToRGB: last dimension of a grayscale image "+("should be size 1, but got size "+lastDims+".")});var reps=new Array($image.rank);reps.fill(1,0,lastDimsIdx);reps[lastDimsIdx]=3;return tile($image,reps)}var grayscaleToRGB=op({grayscaleToRGB_:grayscaleToRGB_});function rotateWithOffset_(image,radians,fillValue,center){if(fillValue===void 0){fillValue=0}if(center===void 0){center=.5}var $image=convertToTensor(image,"image","rotateWithOffset","float32");assert($image.rank===4,function(){return"Error in rotateWithOffset: image must be rank 4,"+("but got rank "+$image.rank+".")});var inputs={image:$image};var attrs={radians:radians,fillValue:fillValue,center:center};var res=ENGINE.runKernel(RotateWithOffset,inputs,attrs);return res}var rotateWithOffset=op({rotateWithOffset_:rotateWithOffset_});function nonMaxSuppSanityCheck(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,softNmsSigma){if(iouThreshold==null){iouThreshold=.5}if(scoreThreshold==null){scoreThreshold=Number.NEGATIVE_INFINITY}if(softNmsSigma==null){softNmsSigma=0}var numBoxes=boxes.shape[0];maxOutputSize=Math.min(maxOutputSize,numBoxes);assert(0<=iouThreshold&&iouThreshold<=1,function(){return"iouThreshold must be in [0, 1], but was '"+iouThreshold+"'"});assert(boxes.rank===2,function(){return"boxes must be a 2D tensor, but was of rank '"+boxes.rank+"'"});assert(boxes.shape[1]===4,function(){return"boxes must have 4 columns, but 2nd dimension was "+boxes.shape[1]});assert(scores.rank===1,function(){return"scores must be a 1D tensor"});assert(scores.shape[0]===numBoxes,function(){return"scores has incompatible shape with boxes. Expected "+numBoxes+", "+("but was "+scores.shape[0])});assert(0<=softNmsSigma&&softNmsSigma<=1,function(){return"softNmsSigma must be in [0, 1], but was '"+softNmsSigma+"'"});return{maxOutputSize:maxOutputSize,iouThreshold:iouThreshold,scoreThreshold:scoreThreshold,softNmsSigma:softNmsSigma}}function nonMaxSuppression_(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold){if(iouThreshold===void 0){iouThreshold=.5}if(scoreThreshold===void 0){scoreThreshold=Number.NEGATIVE_INFINITY}var $boxes=convertToTensor(boxes,"boxes","nonMaxSuppression","float32");var $scores=convertToTensor(scores,"scores","nonMaxSuppression","float32");var inputs=nonMaxSuppSanityCheck($boxes,$scores,maxOutputSize,iouThreshold,scoreThreshold);maxOutputSize=inputs.maxOutputSize;iouThreshold=inputs.iouThreshold;scoreThreshold=inputs.scoreThreshold;var attrs={maxOutputSize:maxOutputSize,iouThreshold:iouThreshold,scoreThreshold:scoreThreshold};return ENGINE.runKernel(NonMaxSuppressionV3,{boxes:$boxes,scores:$scores},attrs)}var nonMaxSuppression=op({nonMaxSuppression_:nonMaxSuppression_});function binaryInsert(arr,element,comparator){var index=binarySearch(arr,element,comparator);var insertionPoint=index<0?-(index+1):index;arr.splice(insertionPoint,0,element)}function binarySearch(arr,target,comparator){return binarySearch_(arr,target,comparator||defaultComparator)}function defaultComparator(a,b){return a>b?1:a<b?-1:0}function binarySearch_(arr,target,comparator){var left=0;var right=arr.length;var middle=0;var found=false;while(left<right){middle=left+(right-left>>>1);var compareResult=comparator(target,arr[middle]);if(compareResult>0){left=middle+1}else{right=middle;found=!compareResult}}return found?left:-left-1}function nonMaxSuppressionV3Impl(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold){return nonMaxSuppressionImpl_(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,0)}function nonMaxSuppressionV4Impl(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,padToMaxOutputSize){return nonMaxSuppressionImpl_(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,0,false,padToMaxOutputSize,true)}function nonMaxSuppressionV5Impl(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,softNmsSigma){return nonMaxSuppressionImpl_(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,softNmsSigma,true)}function nonMaxSuppressionImpl_(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,softNmsSigma,returnScoresTensor,padToMaxOutputSize,returnValidOutputs){if(returnScoresTensor===void 0){returnScoresTensor=false}if(padToMaxOutputSize===void 0){padToMaxOutputSize=false}if(returnValidOutputs===void 0){returnValidOutputs=false}var candidates=[];for(var i=0;i<scores.length;i++){if(scores[i]>scoreThreshold){candidates.push({score:scores[i],boxIndex:i,suppressBeginIndex:0})}}candidates.sort(ascendingComparator);var scale=softNmsSigma>0?-.5/softNmsSigma:0;var selectedIndices=[];var selectedScores=[];while(selectedIndices.length<maxOutputSize&&candidates.length>0){var candidate=candidates.pop();var originalScore=candidate.score,boxIndex=candidate.boxIndex,suppressBeginIndex=candidate.suppressBeginIndex;if(originalScore<scoreThreshold){break}var ignoreCandidate=false;for(var j=selectedIndices.length-1;j>=suppressBeginIndex;--j){var iou=intersectionOverUnion(boxes,boxIndex,selectedIndices[j]);if(iou>=iouThreshold){ignoreCandidate=true;break}candidate.score=candidate.score*suppressWeight(iouThreshold,scale,iou);if(candidate.score<=scoreThreshold){break}}candidate.suppressBeginIndex=selectedIndices.length;if(!ignoreCandidate){if(candidate.score===originalScore){selectedIndices.push(boxIndex);selectedScores.push(candidate.score)}else if(candidate.score>scoreThreshold){binaryInsert(candidates,candidate,ascendingComparator)}}}var validOutputs=selectedIndices.length;var elemsToPad=maxOutputSize-validOutputs;if(padToMaxOutputSize&&elemsToPad>0){selectedIndices.push.apply(selectedIndices,__spread(new Array(elemsToPad).fill(0)));selectedScores.push.apply(selectedScores,__spread(new Array(elemsToPad).fill(0)))}var result={selectedIndices:selectedIndices};if(returnScoresTensor){result["selectedScores"]=selectedScores}if(returnValidOutputs){result["validOutputs"]=validOutputs}return result}function intersectionOverUnion(boxes,i,j){var iCoord=boxes.subarray(i*4,i*4+4);var jCoord=boxes.subarray(j*4,j*4+4);var yminI=Math.min(iCoord[0],iCoord[2]);var xminI=Math.min(iCoord[1],iCoord[3]);var ymaxI=Math.max(iCoord[0],iCoord[2]);var xmaxI=Math.max(iCoord[1],iCoord[3]);var yminJ=Math.min(jCoord[0],jCoord[2]);var xminJ=Math.min(jCoord[1],jCoord[3]);var ymaxJ=Math.max(jCoord[0],jCoord[2]);var xmaxJ=Math.max(jCoord[1],jCoord[3]);var areaI=(ymaxI-yminI)*(xmaxI-xminI);var areaJ=(ymaxJ-yminJ)*(xmaxJ-xminJ);if(areaI<=0||areaJ<=0){return 0}var intersectionYmin=Math.max(yminI,yminJ);var intersectionXmin=Math.max(xminI,xminJ);var intersectionYmax=Math.min(ymaxI,ymaxJ);var intersectionXmax=Math.min(xmaxI,xmaxJ);var intersectionArea=Math.max(intersectionYmax-intersectionYmin,0)*Math.max(intersectionXmax-intersectionXmin,0);return intersectionArea/(areaI+areaJ-intersectionArea)}function suppressWeight(iouThreshold,scale,iou){var weight=Math.exp(scale*iou*iou);return iou<=iouThreshold?weight:0}function ascendingComparator(c1,c2){return c1.score-c2.score||c1.score===c2.score&&c2.boxIndex-c1.boxIndex}function nonMaxSuppressionAsync_(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold){if(iouThreshold===void 0){iouThreshold=.5}if(scoreThreshold===void 0){scoreThreshold=Number.NEGATIVE_INFINITY}return __awaiter(this,void 0,void 0,function(){var $boxes,$scores,inputs,boxesAndScores,boxesVals,scoresVals,selectedIndices;return __generator(this,function(_a){switch(_a.label){case 0:$boxes=convertToTensor(boxes,"boxes","nonMaxSuppressionAsync");$scores=convertToTensor(scores,"scores","nonMaxSuppressionAsync");inputs=nonMaxSuppSanityCheck($boxes,$scores,maxOutputSize,iouThreshold,scoreThreshold);maxOutputSize=inputs.maxOutputSize;iouThreshold=inputs.iouThreshold;scoreThreshold=inputs.scoreThreshold;return[4,Promise.all([$boxes.data(),$scores.data()])];case 1:boxesAndScores=_a.sent();boxesVals=boxesAndScores[0];scoresVals=boxesAndScores[1];selectedIndices=nonMaxSuppressionV3Impl(boxesVals,scoresVals,maxOutputSize,iouThreshold,scoreThreshold).selectedIndices;if($boxes!==boxes){$boxes.dispose()}if($scores!==scores){$scores.dispose()}return[2,tensor1d(selectedIndices,"int32")]}})})}var nonMaxSuppressionAsync=nonMaxSuppressionAsync_;function nonMaxSuppressionWithScore_(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,softNmsSigma){if(iouThreshold===void 0){iouThreshold=.5}if(scoreThreshold===void 0){scoreThreshold=Number.NEGATIVE_INFINITY}if(softNmsSigma===void 0){softNmsSigma=0}var $boxes=convertToTensor(boxes,"boxes","nonMaxSuppression");var $scores=convertToTensor(scores,"scores","nonMaxSuppression");var params=nonMaxSuppSanityCheck($boxes,$scores,maxOutputSize,iouThreshold,scoreThreshold,softNmsSigma);maxOutputSize=params.maxOutputSize;iouThreshold=params.iouThreshold;scoreThreshold=params.scoreThreshold;softNmsSigma=params.softNmsSigma;var inputs={boxes:$boxes,scores:$scores};var attrs={maxOutputSize:maxOutputSize,iouThreshold:iouThreshold,scoreThreshold:scoreThreshold,softNmsSigma:softNmsSigma};var result=ENGINE.runKernel(NonMaxSuppressionV5,inputs,attrs);return{selectedIndices:result[0],selectedScores:result[1]}}var nonMaxSuppressionWithScore=op({nonMaxSuppressionWithScore_:nonMaxSuppressionWithScore_});function nonMaxSuppressionWithScoreAsync_(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,softNmsSigma){if(iouThreshold===void 0){iouThreshold=.5}if(scoreThreshold===void 0){scoreThreshold=Number.NEGATIVE_INFINITY}if(softNmsSigma===void 0){softNmsSigma=0}return __awaiter(this,void 0,void 0,function(){var $boxes,$scores,params,boxesAndScores,boxesVals,scoresVals,_a,selectedIndices,selectedScores;return __generator(this,function(_b){switch(_b.label){case 0:$boxes=convertToTensor(boxes,"boxes","nonMaxSuppressionAsync");$scores=convertToTensor(scores,"scores","nonMaxSuppressionAsync");params=nonMaxSuppSanityCheck($boxes,$scores,maxOutputSize,iouThreshold,scoreThreshold,softNmsSigma);maxOutputSize=params.maxOutputSize;iouThreshold=params.iouThreshold;scoreThreshold=params.scoreThreshold;softNmsSigma=params.softNmsSigma;return[4,Promise.all([$boxes.data(),$scores.data()])];case 1:boxesAndScores=_b.sent();boxesVals=boxesAndScores[0];scoresVals=boxesAndScores[1];_a=nonMaxSuppressionV5Impl(boxesVals,scoresVals,maxOutputSize,iouThreshold,scoreThreshold,softNmsSigma),selectedIndices=_a.selectedIndices,selectedScores=_a.selectedScores;if($boxes!==boxes){$boxes.dispose()}if($scores!==scores){$scores.dispose()}return[2,{selectedIndices:tensor1d(selectedIndices,"int32"),selectedScores:tensor1d(selectedScores)}]}})})}var nonMaxSuppressionWithScoreAsync=nonMaxSuppressionWithScoreAsync_;function nonMaxSuppressionPadded_(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,padToMaxOutputSize){if(iouThreshold===void 0){iouThreshold=.5}if(scoreThreshold===void 0){scoreThreshold=Number.NEGATIVE_INFINITY}if(padToMaxOutputSize===void 0){padToMaxOutputSize=false}var $boxes=convertToTensor(boxes,"boxes","nonMaxSuppression");var $scores=convertToTensor(scores,"scores","nonMaxSuppression");var params=nonMaxSuppSanityCheck($boxes,$scores,maxOutputSize,iouThreshold,scoreThreshold,null);var $maxOutputSize=params.maxOutputSize;var $iouThreshold=params.iouThreshold;var $scoreThreshold=params.scoreThreshold;var inputs={boxes:$boxes,scores:$scores};var attrs={maxOutputSize:$maxOutputSize,iouThreshold:$iouThreshold,scoreThreshold:$scoreThreshold,padToMaxOutputSize:padToMaxOutputSize};var result=ENGINE.runKernel(NonMaxSuppressionV4,inputs,attrs);return{selectedIndices:result[0],validOutputs:result[1]}}var nonMaxSuppressionPadded=op({nonMaxSuppressionPadded_:nonMaxSuppressionPadded_});function nonMaxSuppressionPaddedAsync_(boxes,scores,maxOutputSize,iouThreshold,scoreThreshold,padToMaxOutputSize){if(iouThreshold===void 0){iouThreshold=.5}if(scoreThreshold===void 0){scoreThreshold=Number.NEGATIVE_INFINITY}if(padToMaxOutputSize===void 0){padToMaxOutputSize=false}return __awaiter(this,void 0,void 0,function(){var $boxes,$scores,params,$maxOutputSize,$iouThreshold,$scoreThreshold,_a,boxesVals,scoresVals,_b,selectedIndices,validOutputs;return __generator(this,function(_c){switch(_c.label){case 0:$boxes=convertToTensor(boxes,"boxes","nonMaxSuppressionAsync");$scores=convertToTensor(scores,"scores","nonMaxSuppressionAsync");params=nonMaxSuppSanityCheck($boxes,$scores,maxOutputSize,iouThreshold,scoreThreshold,null);$maxOutputSize=params.maxOutputSize;$iouThreshold=params.iouThreshold;$scoreThreshold=params.scoreThreshold;return[4,Promise.all([$boxes.data(),$scores.data()])];case 1:_a=__read.apply(void 0,[_c.sent(),2]),boxesVals=_a[0],scoresVals=_a[1];_b=nonMaxSuppressionV4Impl(boxesVals,scoresVals,$maxOutputSize,$iouThreshold,$scoreThreshold,padToMaxOutputSize),selectedIndices=_b.selectedIndices,validOutputs=_b.validOutputs;if($boxes!==boxes){$boxes.dispose()}if($scores!==scores){$scores.dispose()}return[2,{selectedIndices:tensor1d(selectedIndices,"int32"),validOutputs:scalar(validOutputs,"int32")}]}})})}var nonMaxSuppressionPaddedAsync=nonMaxSuppressionPaddedAsync_;function resizeBilinear_(images,size,alignCorners,halfPixelCenters){if(alignCorners===void 0){alignCorners=false}if(halfPixelCenters===void 0){halfPixelCenters=false}var $images=convertToTensor(images,"images","resizeBilinear");assert($images.rank===3||$images.rank===4,function(){return"Error in resizeBilinear: x must be rank 3 or 4, but got "+("rank "+$images.rank+".")});assert(size.length===2,function(){return"Error in resizeBilinear: new shape must 2D, but got shape "+(size+".")});assert(halfPixelCenters===false||alignCorners===false,function(){return"Error in resizeBilinear: If halfPixelCenters is true, "+"alignCorners must be false."});var batchImages=$images;var reshapedTo4D=false;if($images.rank===3){reshapedTo4D=true;batchImages=reshape($images,[1,$images.shape[0],$images.shape[1],$images.shape[2]])}__read(size,0);var inputs={images:batchImages};var attrs={alignCorners:alignCorners,halfPixelCenters:halfPixelCenters,size:size};var res=ENGINE.runKernel(ResizeBilinear,inputs,attrs);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return res}var resizeBilinear=op({resizeBilinear_:resizeBilinear_});function resizeNearestNeighbor_(images,size,alignCorners,halfPixelCenters){if(alignCorners===void 0){alignCorners=false}if(halfPixelCenters===void 0){halfPixelCenters=false}var $images=convertToTensor(images,"images","resizeNearestNeighbor");assert($images.rank===3||$images.rank===4,function(){return"Error in resizeNearestNeighbor: x must be rank 3 or 4, but got "+("rank "+$images.rank+".")});assert(size.length===2,function(){return"Error in resizeNearestNeighbor: new shape must 2D, but got shape "+(size+".")});assert($images.dtype==="float32"||$images.dtype==="int32",function(){return"`images` must have `int32` or `float32` as dtype"});assert(halfPixelCenters===false||alignCorners===false,function(){return"Error in resizeNearestNeighbor: If halfPixelCenters is true, "+"alignCorners must be false."});var batchImages=$images;var reshapedTo4D=false;if($images.rank===3){reshapedTo4D=true;batchImages=reshape($images,[1,$images.shape[0],$images.shape[1],$images.shape[2]])}__read(size,0);var inputs={images:batchImages};var attrs={alignCorners:alignCorners,halfPixelCenters:halfPixelCenters,size:size};var res=ENGINE.runKernel(ResizeNearestNeighbor,inputs,attrs);if(reshapedTo4D){return reshape(res,[res.shape[1],res.shape[2],res.shape[3]])}return res}var resizeNearestNeighbor=op({resizeNearestNeighbor_:resizeNearestNeighbor_});function threshold_(image,method,inverted,threshValue){var _a;if(method===void 0){method="binary"}if(inverted===void 0){inverted=false}if(threshValue===void 0){threshValue=.5}var $image=convertToTensor(image,"image","threshold");var RED_INTENCITY_COEF=.2989;var GREEN_INTENCITY_COEF=.587;var BLUE_INTENCITY_COEF=.114;var totalPixelsInImage=$image.shape[0]*$image.shape[1];var $threshold=mul(tensor1d([threshValue]),255);var r,g,b,grayscale;assert($image.rank===3,function(){return"Error in threshold: image must be rank 3,"+("but got rank "+$image.rank+".")});assert($image.shape[2]===3||$image.shape[2]===1,function(){return"Error in threshold: "+"image color channel must be equal to 3 or 1"+("but got "+$image.shape[2]+".")});assert($image.dtype==="int32"||$image.dtype==="float32",function(){return"Error in dtype: image dtype must be int32 or float32,"+("but got dtype "+$image.dtype+".")});assert(method==="otsu"||method==="binary",function(){return"Method must be binary or otsu, but was "+method});if($image.shape[2]===3){_a=__read(split($image,[1,1,1],-1),3),r=_a[0],g=_a[1],b=_a[2];var $r=mul(r,RED_INTENCITY_COEF);var $g=mul(g,GREEN_INTENCITY_COEF);var $b=mul(b,BLUE_INTENCITY_COEF);grayscale=add(add($r,$g),$b)}else{grayscale=image}if(method==="otsu"){var $histogram=bincount(cast(round(grayscale),"int32"),tensor([]),256);$threshold=otsu($histogram,totalPixelsInImage)}var invCondition=inverted?lessEqual(grayscale,$threshold):greater(grayscale,$threshold);var result=cast(mul(invCondition,255),"int32");return result}function otsu(histogram,total){var bestThresh=tensor1d([-1]);var bestInBetVar=tensor1d([0]);var cInBetVar=tensor1d([0]);var classFirst,classSecond,meanFirst,meanSec,weightForeground,weightBack;for(var index=0;index<histogram.size-1;index++){classFirst=slice(histogram,0,index+1);classSecond=slice(histogram,index+1);weightForeground=div(sum(classFirst),total);weightBack=div(sum(classSecond),total);var meanFirstDivA=sum(mul(classFirst,range(0,classFirst.size)));meanFirst=div(meanFirstDivA,sum(classFirst));var meanSecFill=fill(classSecond.shape,classFirst.size);var meanSecAdd=add(range(0,classSecond.size),meanSecFill);var meanSecMul=mul(classSecond,meanSecAdd);meanSec=div(sum(meanSecMul),sum(classSecond));var cInBetVarSubA=sub(meanFirst,meanSec);var cInBetVarSubB=sub(meanFirst,meanSec);var cInBetVarMul=mul(weightForeground,weightBack);cInBetVar=mul(mul(cInBetVarMul,cInBetVarSubA),cInBetVarSubB);var condition=greater(cInBetVar,bestInBetVar);bestInBetVar=where(condition,cInBetVar,bestInBetVar);bestThresh=where(condition,tensor1d([index]),bestThresh)}return bestThresh}var threshold=op({threshold_:threshold_});function transform_(image,transforms,interpolation,fillMode,fillValue,outputShape){if(interpolation===void 0){interpolation="nearest"}if(fillMode===void 0){fillMode="constant"}if(fillValue===void 0){fillValue=0}var $image=convertToTensor(image,"image","transform","float32");var $transforms=convertToTensor(transforms,"transforms","transform","float32");assert($image.rank===4,function(){return"Error in transform: image must be rank 4,"+("but got rank "+$image.rank+".")});assert($transforms.rank===2&&($transforms.shape[0]===$image.shape[0]||$transforms.shape[0]===1)&&$transforms.shape[1]===8,function(){return"Error in transform: Input transform should be batch x 8 or 1 x 8"});assert(outputShape==null||outputShape.length===2,function(){return"Error in transform: outputShape must be [height, width] or null, "+("but got "+outputShape+".")});var inputs={image:$image,transforms:$transforms};var attrs={interpolation:interpolation,fillMode:fillMode,fillValue:fillValue,outputShape:outputShape};return ENGINE.runKernel(Transform,inputs,attrs)}var transform=op({transform_:transform_});function bandPart_(a,numLower,numUpper){assert(numLower%1===0,function(){return"bandPart(): numLower must be an integer, got "+numLower+"."});assert(numUpper%1===0,function(){return"bandPart(): numUpper must be an integer, got "+numUpper+"."});var $a=convertToTensor(a,"a","bandPart");assert($a.rank>=2,function(){return"bandPart(): Rank must be at least 2, got "+$a.rank+"."});var shape=$a.shape;var _a=__read($a.shape.slice(-2),2),M=_a[0],N=_a[1];if(!(numLower<=M)){throw new Error("bandPart(): numLower ("+numLower+")"+(" must not be greater than the number of rows ("+M+")."))}if(!(numUpper<=N)){throw new Error("bandPart(): numUpper ("+numUpper+")"+(" must not be greater than the number of columns ("+N+")."))}if(numLower<0){numLower=M}if(numUpper<0){numUpper=N}var i=reshape(range(0,M,1,"int32"),[-1,1]);var j=range(0,N,1,"int32");var ij=sub(i,j);var inBand=logicalAnd(lessEqual(ij,scalar(+numLower,"int32")),greaterEqual(ij,scalar(-numUpper,"int32")));var zero=zeros([M,N],$a.dtype);return reshape(stack(unstack(reshape($a,[-1,M,N])).map(function(mat){return where(inBand,mat,zero)})),shape)}var bandPart=op({bandPart_:bandPart_});function gramSchmidt_(xs){var inputIsTensor2D;if(Array.isArray(xs)){inputIsTensor2D=false;assert(xs!=null&&xs.length>0,function(){return"Gram-Schmidt process: input must not be null, undefined, or "+"empty"});var dim_1=xs[0].shape[0];var _loop_1=function(i){assert(xs[i].shape[0]===dim_1,function(){return"Gram-Schmidt: Non-unique lengths found in the input vectors: "+("("+xs[i].shape[0]+" vs. "+dim_1+")")})};for(var i=1;i<xs.length;++i){_loop_1(i)}}else{inputIsTensor2D=true;xs=split(xs,xs.shape[0],0).map(function(x){return squeeze(x,[0])})}assert(xs.length<=xs[0].shape[0],function(){return"Gram-Schmidt: Number of vectors ("+xs.length+") exceeds "+("number of dimensions ("+xs[0].shape[0]+").")});var ys=[];var xs1d=xs;var _loop_2=function(i){ys.push(ENGINE.tidy(function(){var x=xs1d[i];if(i>0){for(var j=0;j<i;++j){var proj=mul(sum(mul(ys[j],x)),ys[j]);x=sub(x,proj)}}return div(x,norm(x,"euclidean"))}))};for(var i=0;i<xs.length;++i){_loop_2(i)}if(inputIsTensor2D){return stack(ys,0)}else{return ys}}var gramSchmidt=op({gramSchmidt_:gramSchmidt_});function qr_(x,fullMatrices){if(fullMatrices===void 0){fullMatrices=false}assert(x.rank>=2,function(){return"qr() requires input tensor to have a rank >= 2, but got rank "+x.rank});if(x.rank===2){return qr2d(x,fullMatrices)}else{var outerDimsProd=x.shape.slice(0,x.shape.length-2).reduce(function(value,prev){return value*prev});var x2ds=unstack(reshape(x,[outerDimsProd,x.shape[x.shape.length-2],x.shape[x.shape.length-1]]),0);var q2ds_1=[];var r2ds_1=[];x2ds.forEach(function(x2d){var _a=__read(qr2d(x2d,fullMatrices),2),q2d=_a[0],r2d=_a[1];q2ds_1.push(q2d);r2ds_1.push(r2d)});var q=reshape(stack(q2ds_1,0),x.shape);var r=reshape(stack(r2ds_1,0),x.shape);return[q,r]}}function qr2d(x,fullMatrices){if(fullMatrices===void 0){fullMatrices=false}return ENGINE.tidy(function(){assert(x.shape.length===2,function(){return"qr2d() requires a 2D Tensor, but got a "+x.shape.length+"D Tensor."});var m=x.shape[0];var n=x.shape[1];var q=eye(m);var r=clone(x);var one2D=tensor2d([[1]],[1,1]);var w=clone(one2D);var iters=m>=n?n:m;var _loop_1=function(j){var _a;var rTemp=r;var wTemp=w;var qTemp=q;_a=__read(ENGINE.tidy(function(){var rjEnd1=slice(r,[j,j],[m-j,1]);var normX=norm(rjEnd1);var rjj=slice(r,[j,j],[1,1]);var s=where(greater(rjj,0),tensor2d([[-1]]),tensor2d([[1]]));var u1=sub(rjj,mul(s,normX));var wPre=div(rjEnd1,u1);if(wPre.shape[0]===1){w=clone(one2D)}else{w=concat([one2D,slice(wPre,[1,0],[wPre.shape[0]-1,wPre.shape[1]])],0)}var tau=neg(div(matMul$1(s,u1),normX));var rjEndAll=slice(r,[j,0],[m-j,n]);var tauTimesW=mul(tau,w);var wT=transpose(w);if(j===0){r=sub(rjEndAll,matMul$1(tauTimesW,matMul$1(wT,rjEndAll)))}else{var rTimesTau=sub(rjEndAll,matMul$1(tauTimesW,matMul$1(wT,rjEndAll)));r=concat([slice(r,[0,0],[j,n]),rTimesTau],0)}var tawTimesWT=transpose(tauTimesW);var qAllJEnd=slice(q,[0,j],[m,q.shape[1]-j]);if(j===0){q=sub(qAllJEnd,matMul$1(matMul$1(qAllJEnd,w),tawTimesWT))}else{var qTimesTau=sub(qAllJEnd,matMul$1(matMul$1(qAllJEnd,w),tawTimesWT));q=concat([slice(q,[0,0],[m,j]),qTimesTau],1)}return[w,r,q]}),3),w=_a[0],r=_a[1],q=_a[2];dispose([rTemp,wTemp,qTemp])};for(var j=0;j<iters;++j){_loop_1(j)}if(!fullMatrices&&m>n){q=slice(q,[0,0],[m,n]);r=slice(r,[0,0],[n,n])}return[q,r]})}var qr=op({qr_:qr_});exports.Reduction=void 0;(function(Reduction){Reduction[Reduction["NONE"]=0]="NONE";Reduction[Reduction["MEAN"]=1]="MEAN";Reduction[Reduction["SUM"]=2]="SUM";Reduction[Reduction["SUM_BY_NONZERO_WEIGHTS"]=3]="SUM_BY_NONZERO_WEIGHTS"})(exports.Reduction||(exports.Reduction={}));function computeWeightedLoss_(losses,weights,reduction){if(reduction===void 0){reduction=exports.Reduction.SUM_BY_NONZERO_WEIGHTS}var $losses=convertToTensor(losses,"losses","computeWeightedLoss");var $weights=null;if(weights!=null){$weights=convertToTensor(weights,"weights","computeWeightedLoss")}var weightedLoss=$weights==null?$losses:mul($losses,$weights);if(reduction===exports.Reduction.NONE){return weightedLoss}if(reduction===exports.Reduction.SUM){return sum(weightedLoss)}if(reduction===exports.Reduction.MEAN){if($weights==null){return mean(weightedLoss)}else{var broadcastFactor=$losses.size/$weights.size;var result=div(sum(weightedLoss),sum($weights));return broadcastFactor>1?div(result,scalar(broadcastFactor)):result}}if(reduction===exports.Reduction.SUM_BY_NONZERO_WEIGHTS){if($weights==null){return div(sum(weightedLoss),scalar($losses.size))}else{var broadcastedWeights=mul($weights,ones($losses.shape));var numNonZeros=cast(sum(notEqual(broadcastedWeights,scalar(0))),"float32");return div(sum(weightedLoss),numNonZeros)}}throw Error("Unknown reduction: "+reduction)}var computeWeightedLoss=op({computeWeightedLoss_:computeWeightedLoss_});function absoluteDifference_(labels,predictions,weights,reduction){if(reduction===void 0){reduction=exports.Reduction.SUM_BY_NONZERO_WEIGHTS}var $labels=convertToTensor(labels,"labels","absoluteDifference");var $predictions=convertToTensor(predictions,"predictions","absoluteDifference");var $weights=null;if(weights!=null){$weights=convertToTensor(weights,"weights","absoluteDifference")}assertShapesMatch($labels.shape,$predictions.shape,"Error in absoluteDifference: ");var losses=abs(sub($labels,$predictions));return computeWeightedLoss(losses,$weights,reduction)}var absoluteDifference=op({absoluteDifference_:absoluteDifference_});function cosineDistance_(labels,predictions,axis,weights,reduction){if(reduction===void 0){reduction=exports.Reduction.SUM_BY_NONZERO_WEIGHTS}var $labels=convertToTensor(labels,"labels","cosineDistance");var $predictions=convertToTensor(predictions,"predictions","cosineDistance");var $weights=null;if(weights!=null){$weights=convertToTensor(weights,"weights","cosineDistance")}assertShapesMatch($labels.shape,$predictions.shape,"Error in cosineDistance: ");var one=scalar(1);var losses=sub(one,sum(mul($labels,$predictions),axis,true));return computeWeightedLoss(losses,$weights,reduction)}var cosineDistance=op({cosineDistance_:cosineDistance_});function hingeLoss_(labels,predictions,weights,reduction){if(reduction===void 0){reduction=exports.Reduction.SUM_BY_NONZERO_WEIGHTS}var $labels=convertToTensor(labels,"labels","hingeLoss");var $predictions=convertToTensor(predictions,"predictions","hingeLoss");var $weights=null;if(weights!=null){$weights=convertToTensor(weights,"weights","hingeLoss")}assertShapesMatch($labels.shape,$predictions.shape,"Error in hingeLoss: ");var one=scalar(1);$labels=sub(mul(scalar(2),$labels),one);var losses=relu(sub(one,mul($labels,$predictions)));return computeWeightedLoss(losses,$weights,reduction)}var hingeLoss=op({hingeLoss_:hingeLoss_});function huberLoss_(labels,predictions,weights,delta,reduction){if(delta===void 0){delta=1}if(reduction===void 0){reduction=exports.Reduction.SUM_BY_NONZERO_WEIGHTS}var $labels=convertToTensor(labels,"labels","huberLoss");var $predictions=convertToTensor(predictions,"predictions","huberLoss");var $weights=null;if(weights!=null){$weights=convertToTensor(weights,"weights","huberLoss")}assertShapesMatch($labels.shape,$predictions.shape,"Error in huberLoss: ");var deltaScalar=scalar(delta);var error=abs(sub($predictions,$labels));var quadratic=minimum(error,deltaScalar);var linear=sub(error,quadratic);var losses=add(mul(scalar(.5),square(quadratic)),mul(deltaScalar,linear));return computeWeightedLoss(losses,$weights,reduction)}var huberLoss=op({huberLoss_:huberLoss_});function logLoss_(labels,predictions,weights,epsilon,reduction){if(epsilon===void 0){epsilon=1e-7}if(reduction===void 0){reduction=exports.Reduction.SUM_BY_NONZERO_WEIGHTS}var $labels=convertToTensor(labels,"labels","logLoss");var $predictions=convertToTensor(predictions,"predictions","logLoss");var $weights=null;if(weights!=null){$weights=convertToTensor(weights,"weights","logLoss")}assertShapesMatch($labels.shape,$predictions.shape,"Error in logLoss: ");var one=scalar(1);var epsilonScalar=scalar(epsilon);var l1=neg(mul($labels,log(add($predictions,epsilonScalar))));var l2=mul(sub(one,$labels),log(add(sub(one,$predictions),epsilonScalar)));var losses=sub(l1,l2);return computeWeightedLoss(losses,$weights,reduction)}var logLoss=op({logLoss_:logLoss_});function meanSquaredError_(labels,predictions,weights,reduction){if(reduction===void 0){reduction=exports.Reduction.SUM_BY_NONZERO_WEIGHTS}var $labels=convertToTensor(labels,"labels","meanSquaredError");var $predictions=convertToTensor(predictions,"predictions","meanSquaredError");var $weights=null;if(weights!=null){$weights=convertToTensor(weights,"weights","meanSquaredError")}assertShapesMatch($labels.shape,$predictions.shape,"Error in meanSquaredError: ");var losses=squaredDifference($labels,$predictions);return computeWeightedLoss(losses,$weights,reduction)}var meanSquaredError=op({meanSquaredError_:meanSquaredError_});function sigmoidCrossEntropyWithLogits_(labels,logits){var $labels=convertToTensor(labels,"labels","sigmoidCrossEntropyWithLogits");var $logits=convertToTensor(logits,"logits","sigmoidCrossEntropyWithLogits");assertShapesMatch($labels.shape,$logits.shape,"Error in sigmoidCrossEntropyWithLogits: ");var maxOutput=relu($logits);var outputXTarget=mul($logits,$labels);var sigmoidOutput=log1p(exp(neg(abs($logits))));return add(sub(maxOutput,outputXTarget),sigmoidOutput)}function sigmoidCrossEntropy_(multiClassLabels,logits,weights,labelSmoothing,reduction){if(labelSmoothing===void 0){labelSmoothing=0}if(reduction===void 0){reduction=exports.Reduction.SUM_BY_NONZERO_WEIGHTS}var $multiClassLabels=convertToTensor(multiClassLabels,"multiClassLabels","sigmoidCrossEntropy");var $logits=convertToTensor(logits,"logits","sigmoidCrossEntropy");var $weights=null;if(weights!=null){$weights=convertToTensor(weights,"weights","sigmoidCrossEntropy")}assertShapesMatch($multiClassLabels.shape,$logits.shape,"Error in sigmoidCrossEntropy: ");if(labelSmoothing>0){var labelSmoothingScalar=scalar(labelSmoothing);var one=scalar(1);var half=scalar(.5);$multiClassLabels=add(mul($multiClassLabels,sub(one,labelSmoothingScalar)),mul(half,labelSmoothingScalar))}var losses=sigmoidCrossEntropyWithLogits_($multiClassLabels,$logits);return computeWeightedLoss(losses,$weights,reduction)}var sigmoidCrossEntropy=op({sigmoidCrossEntropy_:sigmoidCrossEntropy_});function softmaxCrossEntropyWithLogits_(labels,logits,dim){if(dim===void 0){dim=-1}if(dim===-1){dim=logits.rank-1}if(dim!==logits.rank-1){throw Error("Softmax cross entropy along a non-last dimension is not yet "+("supported. Labels / logits was rank "+logits.rank+" ")+("and dim was "+dim))}var customOp=customGrad(function(labels,logits,save){var keepDims=true;var lse=logSumExp(logits,[dim],keepDims);var logResult=sub(cast(logits,"float32"),lse);save([labels,logResult]);var costVector=neg(mul(logResult,labels));var value=sum(costVector,[dim]);var gradFunc=function(dy,saved){var _a=__read(saved,2),labels=_a[0],logResult=_a[1];var dyShape=expandShapeToKeepDim(dy.shape,[dim]);return[mul(reshape(dy,dyShape),sub(cast(labels,"float32"),exp(logResult))),mul(reshape(dy,dyShape),sub(exp(logResult),cast(labels,"float32")))]};return{value:value,gradFunc:gradFunc}});return customOp(labels,logits)}function softmaxCrossEntropy_(onehotLabels,logits,weights,labelSmoothing,reduction){if(labelSmoothing===void 0){labelSmoothing=0}if(reduction===void 0){reduction=exports.Reduction.SUM_BY_NONZERO_WEIGHTS}var $onehotLabels=convertToTensor(onehotLabels,"onehotLabels","softmaxCrossEntropy");var $logits=convertToTensor(logits,"logits","softmaxCrossEntropy");var $weights=null;if(weights!=null){$weights=convertToTensor(weights,"weights","softmaxCrossEntropy")}assertShapesMatch($onehotLabels.shape,$logits.shape,"Error in softmaxCrossEntropy: ");if(labelSmoothing>0){var labelSmoothingScalar=scalar(labelSmoothing);var one=scalar(1);var numClasses=scalar($onehotLabels.shape[1]);$onehotLabels=add(mul($onehotLabels,sub(one,labelSmoothingScalar)),div(labelSmoothingScalar,numClasses))}var losses=softmaxCrossEntropyWithLogits_($onehotLabels,$logits);return computeWeightedLoss(losses,$weights,reduction)}var softmaxCrossEntropy=op({softmaxCrossEntropy_:softmaxCrossEntropy_});function sparseFillEmptyRows_(indices,values,denseShape,defaultValue){var $indices=convertToTensor(indices,"indices","sparseFillEmptyRows");var $values=convertToTensor(values,"values","sparseFillEmptyRows");var $denseShape=convertToTensor(denseShape,"denseShape","sparseFillEmptyRows");var $defaultValue=convertToTensor(defaultValue,"defaultValue","sparseFillEmptyRows",$values.dtype);if($indices.rank!==2){throw new Error("Indices should be Tensor2D but received shape\n        "+$indices.shape)}if($values.rank!==1){throw new Error("Values should be Tensor1D but received shape "+$values.shape)}if($denseShape.rank!==1){throw new Error("Dense shape should be Tensor1D but received shape "+$denseShape.shape)}if($defaultValue.rank!==0){throw new Error("Default value should be a scalar but received shape "+$defaultValue.shape)}var inputs={indices:$indices,values:$values,denseShape:$denseShape,defaultValue:$defaultValue};var result=ENGINE.runKernel(SparseFillEmptyRows,inputs);return{outputIndices:result[0],outputValues:result[1],emptyRowIndicator:result[2],reverseIndexMap:result[3]}}var sparseFillEmptyRows=op({sparseFillEmptyRows_:sparseFillEmptyRows_});function sparseReshape_(inputIndices,inputShape,newShape){var $inputIndices=convertToTensor(inputIndices,"inputIndices","sparseReshape");var $inputShape=convertToTensor(inputShape,"inputShape","sparseReshape");var $newShape=convertToTensor(newShape,"newShape","sparseReshape");if($inputIndices.rank!==2){throw new Error("Input indices should be Tensor2D but received shape\n        "+$inputIndices.shape)}if($inputShape.rank!==1){throw new Error("Input shape should be Tensor1D but received shape "+$inputShape.shape)}if($newShape.rank!==1){throw new Error("New shape should be Tensor1D but received shape "+$newShape.shape)}var inputs={inputIndices:$inputIndices,inputShape:$inputShape,newShape:$newShape};var result=ENGINE.runKernel(SparseReshape,inputs);return{outputIndices:result[0],outputShape:result[1]}}var sparseReshape=op({sparseReshape_:sparseReshape_});function sparseSegmentMean_(data,indices,segmentIds){var $data=convertToTensor(data,"data","sparseSegmentMean");var $indices=convertToTensor(indices,"indices","sparseSegmentMean");var $segmentIds=convertToTensor(segmentIds,"segmentIds","sparseSegmentMean");if($data.rank<1){throw new Error("Data should be at least 1 dimensional but received scalar")}if($indices.rank!==1){throw new Error("Indices should be Tensor1D but received shape\n          "+$indices.shape)}if($segmentIds.rank!==1){throw new Error("Segment ids should be Tensor1D but received shape\n          "+$segmentIds.shape)}var inputs={data:$data,indices:$indices,segmentIds:$segmentIds};return ENGINE.runKernel(SparseSegmentMean,inputs)}var sparseSegmentMean=op({sparseSegmentMean_:sparseSegmentMean_});function sparseSegmentSum_(data,indices,segmentIds){var $data=convertToTensor(data,"data","sparseSegmentSum");var $indices=convertToTensor(indices,"indices","sparseSegmentSum");var $segmentIds=convertToTensor(segmentIds,"segmentIds","sparseSegmentSum");if($data.rank<1){throw new Error("Data should be at least 1 dimensional but received scalar")}if($indices.rank!==1){throw new Error("Indices should be Tensor1D but received shape\n         "+$indices.shape)}if($segmentIds.rank!==1){throw new Error("Segment ids should be Tensor1D but received shape\n         "+$segmentIds.shape)}var inputs={data:$data,indices:$indices,segmentIds:$segmentIds};return ENGINE.runKernel(SparseSegmentSum,inputs)}var sparseSegmentSum=op({sparseSegmentSum_:sparseSegmentSum_});function stringNGrams_(data,dataSplits,separator,nGramWidths,leftPad,rightPad,padWidth,preserveShortSequences){var $data=convertToTensor(data,"data","stringNGrams","string");if($data.dtype!=="string"){throw new Error("Data must be of datatype string")}if($data.shape.length!==1){throw new Error("Data must be a vector, saw: "+$data.shape)}var $dataSplits=convertToTensor(dataSplits,"dataSplits","stringNGrams");if($dataSplits.dtype!=="int32"){throw new Error("Data splits must be of datatype int32")}var attrs={separator:separator,nGramWidths:nGramWidths,leftPad:leftPad,rightPad:rightPad,padWidth:padWidth,preserveShortSequences:preserveShortSequences};var inputs={data:$data,dataSplits:$dataSplits};var result=ENGINE.runKernel(StringNGrams,inputs,attrs);return{nGrams:result[0],nGramsSplits:result[1]}}var stringNGrams=op({stringNGrams_:stringNGrams_});function stringSplit_(input,delimiter,skipEmpty){if(skipEmpty===void 0){skipEmpty=true}var $input=convertToTensor(input,"input","stringSplit","string");var $delimiter=convertToTensor(delimiter,"delimiter","stringSplit","string");if($input.rank!==1){throw new Error("Input should be Tensor1D but received shape "+$input.shape)}if($delimiter.rank!==0){throw new Error("Delimiter should be a scalar but received shape "+$delimiter.shape)}var attrs={skipEmpty:skipEmpty};var inputs={input:$input,delimiter:$delimiter};var result=ENGINE.runKernel(StringSplit,inputs,attrs);return{indices:result[0],values:result[1],shape:result[2]}}var stringSplit=op({stringSplit_:stringSplit_});function stringToHashBucketFast_(input,numBuckets){var $input=convertToTensor(input,"input","stringToHashBucketFast","string");var attrs={numBuckets:numBuckets};if(numBuckets<=0){throw new Error("Number of buckets must be at least 1")}var inputs={input:$input};return ENGINE.runKernel(StringToHashBucketFast,inputs,attrs)}var stringToHashBucketFast=op({stringToHashBucketFast_:stringToHashBucketFast_});var spectral={fft:fft,ifft:ifft,rfft:rfft,irfft:irfft};var signal={hammingWindow:hammingWindow,hannWindow:hannWindow,frame:frame,stft:stft};var image={flipLeftRight:flipLeftRight,grayscaleToRGB:grayscaleToRGB,resizeNearestNeighbor:resizeNearestNeighbor,resizeBilinear:resizeBilinear,rotateWithOffset:rotateWithOffset,cropAndResize:cropAndResize,nonMaxSuppression:nonMaxSuppression,nonMaxSuppressionAsync:nonMaxSuppressionAsync,nonMaxSuppressionWithScore:nonMaxSuppressionWithScore,nonMaxSuppressionWithScoreAsync:nonMaxSuppressionWithScoreAsync,nonMaxSuppressionPadded:nonMaxSuppressionPadded,nonMaxSuppressionPaddedAsync:nonMaxSuppressionPaddedAsync,threshold:threshold,transform:transform};var linalg={bandPart:bandPart,gramSchmidt:gramSchmidt,qr:qr};var losses={absoluteDifference:absoluteDifference,computeWeightedLoss:computeWeightedLoss,cosineDistance:cosineDistance,hingeLoss:hingeLoss,huberLoss:huberLoss,logLoss:logLoss,meanSquaredError:meanSquaredError,sigmoidCrossEntropy:sigmoidCrossEntropy,softmaxCrossEntropy:softmaxCrossEntropy};var sparse={sparseFillEmptyRows:sparseFillEmptyRows,sparseReshape:sparseReshape,sparseSegmentMean:sparseSegmentMean,sparseSegmentSum:sparseSegmentSum};var string={stringNGrams:stringNGrams,stringSplit:stringSplit,stringToHashBucketFast:stringToHashBucketFast};var Optimizer=function(_super){__extends(Optimizer,_super);function Optimizer(){return _super!==null&&_super.apply(this,arguments)||this}Optimizer.prototype.minimize=function(f,returnCost,varList){if(returnCost===void 0){returnCost=false}var _a=this.computeGradients(f,varList),value=_a.value,grads=_a.grads;if(varList!=null){var gradArray=varList.map(function(v){return{name:v.name,tensor:grads[v.name]}});this.applyGradients(gradArray)}else{this.applyGradients(grads)}dispose(grads);if(returnCost){return value}else{value.dispose();return null}};Object.defineProperty(Optimizer.prototype,"iterations",{get:function(){if(this.iterations_==null){this.iterations_=0}return this.iterations_},enumerable:true,configurable:true});Optimizer.prototype.incrementIterations=function(){this.iterations_=this.iterations+1};Optimizer.prototype.computeGradients=function(f,varList){return variableGrads(f,varList)};Optimizer.prototype.dispose=function(){if(this.iterations_!=null){dispose(this.iterations_)}};Optimizer.prototype.saveIterations=function(){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(_a){if(this.iterations_==null){this.iterations_=0}return[2,{name:"iter",tensor:scalar(this.iterations_,"int32")}]})})};Optimizer.prototype.getWeights=function(){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(_a){throw new Error("getWeights() is not implemented for this optimizer yet.")})})};Optimizer.prototype.setWeights=function(weightValues){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(_a){throw new Error("setWeights() is not implemented for this optimizer class "+(""+this.getClassName()))})})};Optimizer.prototype.extractIterations=function(weightValues){return __awaiter(this,void 0,void 0,function(){var _a;return __generator(this,function(_b){switch(_b.label){case 0:_a=this;return[4,weightValues[0].tensor.data()];case 1:_a.iterations_=_b.sent()[0];return[2,weightValues.slice(1)]}})})};return Optimizer}(Serializable);Object.defineProperty(Optimizer,Symbol.hasInstance,{value:function(instance){return instance.minimize!=null&&instance.computeGradients!=null&&instance.applyGradients!=null}});var AdadeltaOptimizer=function(_super){__extends(AdadeltaOptimizer,_super);function AdadeltaOptimizer(learningRate,rho,epsilon){if(epsilon===void 0){epsilon=null}var _this=_super.call(this)||this;_this.learningRate=learningRate;_this.rho=rho;_this.epsilon=epsilon;_this.accumulatedGrads=[];_this.accumulatedUpdates=[];if(epsilon==null){_this.epsilon=ENGINE.backend.epsilon()}return _this}AdadeltaOptimizer.prototype.applyGradients=function(variableGradients){var _this=this;var variableNames=Array.isArray(variableGradients)?variableGradients.map(function(item){return item.name}):Object.keys(variableGradients);variableNames.forEach(function(name,i){var value=ENGINE.registeredVariables[name];var trainable=false;if(_this.accumulatedGrads[i]==null){_this.accumulatedGrads[i]={originalName:name+"/accum_grad",variable:tidy(function(){return zerosLike(value).variable(trainable)})}}if(_this.accumulatedUpdates[i]==null){_this.accumulatedUpdates[i]={originalName:name+"/accum_var",variable:tidy(function(){return zerosLike(value).variable(trainable)})}}var gradient=Array.isArray(variableGradients)?variableGradients[i].tensor:variableGradients[name];if(gradient==null){return}var accumulatedGrad=_this.accumulatedGrads[i].variable;var accumulatedUpdate=_this.accumulatedUpdates[i].variable;tidy(function(){var newAccumulatedGrad=add(mul(accumulatedGrad,_this.rho),mul(square(gradient),1-_this.rho));var updates=mul(div(sqrt(add(accumulatedUpdate,_this.epsilon)),sqrt(add(accumulatedGrad,_this.epsilon))),gradient);var newAccumulatedUpdate=add(mul(accumulatedUpdate,_this.rho),mul(square(updates),1-_this.rho));accumulatedGrad.assign(newAccumulatedGrad);accumulatedUpdate.assign(newAccumulatedUpdate);var newValue=add(mul(updates,-_this.learningRate),value);value.assign(newValue)})});this.incrementIterations()};AdadeltaOptimizer.prototype.dispose=function(){if(this.accumulatedUpdates!=null){dispose(this.accumulatedGrads.map(function(v){return v.variable}));dispose(this.accumulatedUpdates.map(function(v){return v.variable}))}};AdadeltaOptimizer.prototype.getWeights=function(){return __awaiter(this,void 0,void 0,function(){var variables;return __generator(this,function(_a){switch(_a.label){case 0:variables=__spread(this.accumulatedGrads,this.accumulatedUpdates);return[4,this.saveIterations()];case 1:return[2,[_a.sent()].concat(variables.map(function(v){return{name:v.originalName,tensor:v.variable}}))]}})})};AdadeltaOptimizer.prototype.setWeights=function(weightValues){return __awaiter(this,void 0,void 0,function(){var variableCount,trainable;return __generator(this,function(_a){switch(_a.label){case 0:return[4,this.extractIterations(weightValues)];case 1:weightValues=_a.sent();variableCount=weightValues.length/2;trainable=false;this.accumulatedGrads=weightValues.slice(0,variableCount).map(function(v){return{originalName:v.name,variable:v.tensor.variable(trainable)}});this.accumulatedUpdates=weightValues.slice(variableCount,variableCount*2).map(function(v){return{originalName:v.name,variable:v.tensor.variable(trainable)}});return[2]}})})};AdadeltaOptimizer.prototype.getConfig=function(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}};AdadeltaOptimizer.fromConfig=function(cls,config){return new cls(config["learningRate"],config["rho"],config["epsilon"])};return AdadeltaOptimizer}(Optimizer);AdadeltaOptimizer.className="Adadelta";registerClass(AdadeltaOptimizer);var AdagradOptimizer=function(_super){__extends(AdagradOptimizer,_super);function AdagradOptimizer(learningRate,initialAccumulatorValue){if(initialAccumulatorValue===void 0){initialAccumulatorValue=.1}var _this=_super.call(this)||this;_this.learningRate=learningRate;_this.initialAccumulatorValue=initialAccumulatorValue;_this.accumulatedGrads=[];return _this}AdagradOptimizer.prototype.applyGradients=function(variableGradients){var _this=this;var variableNames=Array.isArray(variableGradients)?variableGradients.map(function(item){return item.name}):Object.keys(variableGradients);variableNames.forEach(function(name,i){var value=ENGINE.registeredVariables[name];if(_this.accumulatedGrads[i]==null){var trainable_1=false;_this.accumulatedGrads[i]={originalName:name+"/accumulator",variable:tidy(function(){return fill(value.shape,_this.initialAccumulatorValue).variable(trainable_1)})}}var gradient=Array.isArray(variableGradients)?variableGradients[i].tensor:variableGradients[name];if(gradient==null){return}var accumulatedGrad=_this.accumulatedGrads[i].variable;tidy(function(){var newAccumulatedGrad=add(accumulatedGrad,square(gradient));accumulatedGrad.assign(newAccumulatedGrad);var newValue=add(mul(div(gradient,sqrt(add(newAccumulatedGrad,ENGINE.backend.epsilon()))),-_this.learningRate),value);value.assign(newValue)})});this.incrementIterations()};AdagradOptimizer.prototype.dispose=function(){if(this.accumulatedGrads!=null){dispose(this.accumulatedGrads.map(function(v){return v.variable}))}};AdagradOptimizer.prototype.getWeights=function(){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(_a){switch(_a.label){case 0:return[4,this.saveIterations()];case 1:return[2,[_a.sent()].concat(this.accumulatedGrads.map(function(v){return{name:v.originalName,tensor:v.variable}}))]}})})};AdagradOptimizer.prototype.setWeights=function(weightValues){return __awaiter(this,void 0,void 0,function(){var trainable;return __generator(this,function(_a){switch(_a.label){case 0:return[4,this.extractIterations(weightValues)];case 1:weightValues=_a.sent();trainable=false;this.accumulatedGrads=weightValues.map(function(v){return{originalName:v.name,variable:v.tensor.variable(trainable)}});return[2]}})})};AdagradOptimizer.prototype.getConfig=function(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}};AdagradOptimizer.fromConfig=function(cls,config){return new cls(config["learningRate"],config["initialAccumulatorValue"])};return AdagradOptimizer}(Optimizer);AdagradOptimizer.className="Adagrad";registerClass(AdagradOptimizer);var AdamOptimizer=function(_super){__extends(AdamOptimizer,_super);function AdamOptimizer(learningRate,beta1,beta2,epsilon){if(epsilon===void 0){epsilon=null}var _this=_super.call(this)||this;_this.learningRate=learningRate;_this.beta1=beta1;_this.beta2=beta2;_this.epsilon=epsilon;_this.accumulatedFirstMoment=[];_this.accumulatedSecondMoment=[];tidy(function(){_this.accBeta1=scalar(beta1).variable();_this.accBeta2=scalar(beta2).variable()});if(epsilon==null){_this.epsilon=ENGINE.backend.epsilon()}return _this}AdamOptimizer.prototype.applyGradients=function(variableGradients){var _this=this;var varNames=Array.isArray(variableGradients)?variableGradients.map(function(v){return v.name}):Object.keys(variableGradients);tidy(function(){var oneMinusAccBeta1=sub(1,_this.accBeta1);var oneMinusAccBeta2=sub(1,_this.accBeta2);varNames.forEach(function(name,i){var value=ENGINE.registeredVariables[name];var trainable=false;if(_this.accumulatedFirstMoment[i]==null){_this.accumulatedFirstMoment[i]={originalName:name+"/m",variable:tidy(function(){return zerosLike(value).variable(trainable)})}}if(_this.accumulatedSecondMoment[i]==null){_this.accumulatedSecondMoment[i]={originalName:name+"/v",variable:tidy(function(){return zerosLike(value).variable(trainable)})}}var gradient=Array.isArray(variableGradients)?variableGradients[i].tensor:variableGradients[name];if(gradient==null){return}var firstMoment=_this.accumulatedFirstMoment[i].variable;var secondMoment=_this.accumulatedSecondMoment[i].variable;var newFirstMoment=add(mul(firstMoment,_this.beta1),mul(gradient,1-_this.beta1));var newSecondMoment=add(mul(secondMoment,_this.beta2),mul(square(gradient),1-_this.beta2));var biasCorrectedFirstMoment=div(newFirstMoment,oneMinusAccBeta1);var biasCorrectedSecondMoment=div(newSecondMoment,oneMinusAccBeta2);firstMoment.assign(newFirstMoment);secondMoment.assign(newSecondMoment);var newValue=add(mul(div(biasCorrectedFirstMoment,add(sqrt(biasCorrectedSecondMoment),_this.epsilon)),-_this.learningRate),value);value.assign(newValue)});_this.accBeta1.assign(mul(_this.accBeta1,_this.beta1));_this.accBeta2.assign(mul(_this.accBeta2,_this.beta2))});this.incrementIterations()};AdamOptimizer.prototype.dispose=function(){this.accBeta1.dispose();this.accBeta2.dispose();if(this.accumulatedFirstMoment!=null){dispose(this.accumulatedFirstMoment.map(function(v){return v.variable}))}if(this.accumulatedSecondMoment!=null){dispose(this.accumulatedSecondMoment.map(function(v){return v.variable}))}};AdamOptimizer.prototype.getWeights=function(){return __awaiter(this,void 0,void 0,function(){var variables;return __generator(this,function(_a){switch(_a.label){case 0:variables=__spread(this.accumulatedFirstMoment,this.accumulatedSecondMoment);return[4,this.saveIterations()];case 1:return[2,[_a.sent()].concat(variables.map(function(v){return{name:v.originalName,tensor:v.variable}}))]}})})};AdamOptimizer.prototype.setWeights=function(weightValues){return __awaiter(this,void 0,void 0,function(){var variableCount,trainable;var _this=this;return __generator(this,function(_a){switch(_a.label){case 0:return[4,this.extractIterations(weightValues)];case 1:weightValues=_a.sent();tidy(function(){_this.accBeta1.assign(pow(_this.beta1,_this.iterations_+1));_this.accBeta2.assign(pow(_this.beta2,_this.iterations_+1))});variableCount=weightValues.length/2;trainable=false;this.accumulatedFirstMoment=weightValues.slice(0,variableCount).map(function(v){return{originalName:v.name,variable:v.tensor.variable(trainable)}});this.accumulatedSecondMoment=weightValues.slice(variableCount,variableCount*2).map(function(v){return{originalName:v.name,variable:v.tensor.variable(trainable)}});return[2]}})})};AdamOptimizer.prototype.getConfig=function(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}};AdamOptimizer.fromConfig=function(cls,config){return new cls(config["learningRate"],config["beta1"],config["beta2"],config["epsilon"])};return AdamOptimizer}(Optimizer);AdamOptimizer.className="Adam";registerClass(AdamOptimizer);var AdamaxOptimizer=function(_super){__extends(AdamaxOptimizer,_super);function AdamaxOptimizer(learningRate,beta1,beta2,epsilon,decay){if(epsilon===void 0){epsilon=null}if(decay===void 0){decay=0}var _this=_super.call(this)||this;_this.learningRate=learningRate;_this.beta1=beta1;_this.beta2=beta2;_this.epsilon=epsilon;_this.decay=decay;_this.accumulatedFirstMoment=[];_this.accumulatedWeightedInfNorm=[];tidy(function(){_this.iteration=scalar(0).variable();_this.accBeta1=scalar(beta1).variable()});if(epsilon==null){_this.epsilon=ENGINE.backend.epsilon()}return _this}AdamaxOptimizer.prototype.applyGradients=function(variableGradients){var _this=this;var variableNames=Array.isArray(variableGradients)?variableGradients.map(function(item){return item.name}):Object.keys(variableGradients);tidy(function(){var oneMinusAccBeta1=sub(1,_this.accBeta1);var lr=div(-_this.learningRate,add(mul(_this.iteration,_this.decay),1));variableNames.forEach(function(name,i){var value=ENGINE.registeredVariables[name];var trainable=false;if(_this.accumulatedFirstMoment[i]==null){_this.accumulatedFirstMoment[i]={originalName:name+"/m",variable:zerosLike(value).variable(trainable)}}if(_this.accumulatedWeightedInfNorm[i]==null){_this.accumulatedWeightedInfNorm[i]={originalName:name+"/v",variable:zerosLike(value).variable(trainable)}}var gradient=Array.isArray(variableGradients)?variableGradients[i].tensor:variableGradients[name];if(gradient==null){return}var firstMoment=_this.accumulatedFirstMoment[i].variable;var weightedInfNorm=_this.accumulatedWeightedInfNorm[i].variable;var newFirstMoment=add(mul(firstMoment,_this.beta1),mul(gradient,1-_this.beta1));var ut0=mul(weightedInfNorm,_this.beta2);var ut1=abs(gradient);var newWeightedInfNorm=maximum(ut0,ut1);firstMoment.assign(newFirstMoment);weightedInfNorm.assign(newWeightedInfNorm);var newValue=add(mul(div(lr,oneMinusAccBeta1),div(newFirstMoment,add(newWeightedInfNorm,_this.epsilon))),value);value.assign(newValue)});_this.iteration.assign(add(_this.iteration,1));_this.accBeta1.assign(mul(_this.accBeta1,_this.beta1))});this.incrementIterations()};AdamaxOptimizer.prototype.dispose=function(){this.accBeta1.dispose();this.iteration.dispose();if(this.accumulatedFirstMoment!=null){dispose(this.accumulatedFirstMoment.map(function(v){return v.variable}))}if(this.accumulatedWeightedInfNorm!=null){dispose(this.accumulatedWeightedInfNorm.map(function(v){return v.variable}))}};AdamaxOptimizer.prototype.getWeights=function(){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(_a){throw new Error("getWeights() is not implemented for Adamax yet.")})})};AdamaxOptimizer.prototype.setWeights=function(weightValues){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(_a){throw new Error("setWeights() is not implemented for Adamax yet.")})})};AdamaxOptimizer.prototype.getConfig=function(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}};AdamaxOptimizer.fromConfig=function(cls,config){return new cls(config["learningRate"],config["beta1"],config["beta2"],config["epsilon"],config["decay"])};return AdamaxOptimizer}(Optimizer);AdamaxOptimizer.className="Adamax";registerClass(AdamaxOptimizer);var SGDOptimizer=function(_super){__extends(SGDOptimizer,_super);function SGDOptimizer(learningRate){var _this=_super.call(this)||this;_this.learningRate=learningRate;_this.setLearningRate(learningRate);return _this}SGDOptimizer.prototype.applyGradients=function(variableGradients){var _this=this;var varNames=Array.isArray(variableGradients)?variableGradients.map(function(v){return v.name}):Object.keys(variableGradients);varNames.forEach(function(name,i){var gradient=Array.isArray(variableGradients)?variableGradients[i].tensor:variableGradients[name];if(gradient==null){return}var value=ENGINE.registeredVariables[name];tidy(function(){var newValue=add(mul(_this.c,gradient),value);value.assign(newValue)})});this.incrementIterations()};SGDOptimizer.prototype.setLearningRate=function(learningRate){this.learningRate=learningRate;if(this.c!=null){this.c.dispose()}this.c=keep(scalar(-learningRate))};SGDOptimizer.prototype.dispose=function(){this.c.dispose()};SGDOptimizer.prototype.getWeights=function(){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(_a){switch(_a.label){case 0:return[4,this.saveIterations()];case 1:return[2,[_a.sent()]]}})})};SGDOptimizer.prototype.setWeights=function(weightValues){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(_a){switch(_a.label){case 0:return[4,this.extractIterations(weightValues)];case 1:weightValues=_a.sent();if(weightValues.length!==0){throw new Error("SGD optimizer does not have settable weights.")}return[2]}})})};SGDOptimizer.prototype.getConfig=function(){return{learningRate:this.learningRate}};SGDOptimizer.fromConfig=function(cls,config){return new cls(config["learningRate"])};return SGDOptimizer}(Optimizer);SGDOptimizer.className="SGD";registerClass(SGDOptimizer);var MomentumOptimizer=function(_super){__extends(MomentumOptimizer,_super);function MomentumOptimizer(learningRate,momentum,useNesterov){if(useNesterov===void 0){useNesterov=false}var _this=_super.call(this,learningRate)||this;_this.learningRate=learningRate;_this.momentum=momentum;_this.useNesterov=useNesterov;_this.accumulations=[];_this.m=scalar(_this.momentum);return _this}MomentumOptimizer.prototype.applyGradients=function(variableGradients){var _this=this;var variableNames=Array.isArray(variableGradients)?variableGradients.map(function(item){return item.name}):Object.keys(variableGradients);variableNames.forEach(function(name,i){var value=ENGINE.registeredVariables[name];if(_this.accumulations[i]==null){var trainable_1=false;_this.accumulations[i]={originalName:name+"/momentum",variable:tidy(function(){return zerosLike(value).variable(trainable_1)})}}var accumulation=_this.accumulations[i].variable;var gradient=Array.isArray(variableGradients)?variableGradients[i].tensor:variableGradients[name];if(gradient==null){return}tidy(function(){var newValue;var newAccumulation=add(mul(_this.m,accumulation),gradient);if(_this.useNesterov){newValue=add(mul(_this.c,add(gradient,mul(newAccumulation,_this.m))),value)}else{newValue=add(mul(_this.c,newAccumulation),value)}accumulation.assign(newAccumulation);value.assign(newValue)})});this.incrementIterations()};MomentumOptimizer.prototype.dispose=function(){this.m.dispose();if(this.accumulations!=null){dispose(this.accumulations.map(function(v){return v.variable}))}};MomentumOptimizer.prototype.setMomentum=function(momentum){this.momentum=momentum};MomentumOptimizer.prototype.getWeights=function(){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(_a){switch(_a.label){case 0:return[4,this.saveIterations()];case 1:return[2,[_a.sent()].concat(this.accumulations.map(function(v){return{name:v.originalName,tensor:v.variable}}))]}})})};MomentumOptimizer.prototype.setWeights=function(weightValues){return __awaiter(this,void 0,void 0,function(){var trainable;return __generator(this,function(_a){switch(_a.label){case 0:return[4,this.extractIterations(weightValues)];case 1:weightValues=_a.sent();trainable=false;this.accumulations=weightValues.map(function(v){return{originalName:v.name,variable:v.tensor.variable(trainable)}});return[2]}})})};MomentumOptimizer.prototype.getConfig=function(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}};MomentumOptimizer.fromConfig=function(cls,config){return new cls(config["learningRate"],config["momentum"],config["useNesterov"])};return MomentumOptimizer}(SGDOptimizer);MomentumOptimizer.className="Momentum";registerClass(MomentumOptimizer);var RMSPropOptimizer=function(_super){__extends(RMSPropOptimizer,_super);function RMSPropOptimizer(learningRate,decay,momentum,epsilon,centered){if(decay===void 0){decay=.9}if(momentum===void 0){momentum=0}if(epsilon===void 0){epsilon=null}if(centered===void 0){centered=false}var _this=_super.call(this)||this;_this.learningRate=learningRate;_this.decay=decay;_this.momentum=momentum;_this.epsilon=epsilon;_this.accumulatedMeanSquares=[];_this.accumulatedMoments=[];_this.accumulatedMeanGrads=[];_this.centered=centered;if(epsilon==null){_this.epsilon=ENGINE.backend.epsilon()}if(learningRate==null){throw new Error("learningRate for RMSPropOptimizer must be defined.")}return _this}RMSPropOptimizer.prototype.applyGradients=function(variableGradients){var _this=this;var variableNames=Array.isArray(variableGradients)?variableGradients.map(function(item){return item.name}):Object.keys(variableGradients);variableNames.forEach(function(name,i){var value=ENGINE.registeredVariables[name];var trainable=false;if(_this.accumulatedMeanSquares[i]==null){_this.accumulatedMeanSquares[i]={originalName:name+"/rms",variable:tidy(function(){return zerosLike(value).variable(trainable)})}}if(_this.accumulatedMoments[i]==null){_this.accumulatedMoments[i]={originalName:name+"/momentum",variable:tidy(function(){return zerosLike(value).variable(trainable)})}}if(_this.accumulatedMeanGrads[i]==null&&_this.centered){_this.accumulatedMeanGrads[i]={originalName:name+"/mg",variable:tidy(function(){return zerosLike(value).variable(trainable)})}}var gradient=Array.isArray(variableGradients)?variableGradients[i].tensor:variableGradients[name];if(gradient==null){return}var accumulatedMeanSquare=_this.accumulatedMeanSquares[i].variable;var accumulatedMoments=_this.accumulatedMoments[i].variable;tidy(function(){var newAccumulatedMeanSquare=add(mul(accumulatedMeanSquare,_this.decay),mul(square(gradient),1-_this.decay));if(_this.centered){var accumulatedMeanGrad=_this.accumulatedMeanGrads[i].variable;var newAccumulatedMeanGrad=add(mul(accumulatedMeanGrad,_this.decay),mul(gradient,1-_this.decay));var gradContribution=div(mul(gradient,_this.learningRate),sqrt(sub(newAccumulatedMeanSquare,add(square(newAccumulatedMeanGrad),_this.epsilon))));var newAccumulatedMoments=add(mul(accumulatedMoments,_this.momentum),gradContribution);accumulatedMeanSquare.assign(newAccumulatedMeanSquare);accumulatedMeanGrad.assign(newAccumulatedMeanGrad);accumulatedMoments.assign(newAccumulatedMoments);var newValue=sub(value,newAccumulatedMoments);value.assign(newValue)}else{var newAccumulatedMeanSquare_1=add(mul(accumulatedMeanSquare,_this.decay),mul(square(gradient),1-_this.decay));var newAccumulatedMoments=add(mul(accumulatedMoments,_this.momentum),div(mul(gradient,_this.learningRate),sqrt(add(newAccumulatedMeanSquare_1,_this.epsilon))));accumulatedMeanSquare.assign(newAccumulatedMeanSquare_1);accumulatedMoments.assign(newAccumulatedMoments);var newValue=sub(value,newAccumulatedMoments);value.assign(newValue)}})});this.incrementIterations()};RMSPropOptimizer.prototype.dispose=function(){if(this.accumulatedMeanSquares!=null){dispose(this.accumulatedMeanSquares.map(function(v){return v.variable}))}if(this.accumulatedMeanGrads!=null&&this.centered){dispose(this.accumulatedMeanGrads.map(function(v){return v.variable}))}if(this.accumulatedMoments!=null){dispose(this.accumulatedMoments.map(function(v){return v.variable}))}};RMSPropOptimizer.prototype.getWeights=function(){return __awaiter(this,void 0,void 0,function(){var variables;return __generator(this,function(_a){switch(_a.label){case 0:variables=__spread(this.accumulatedMeanSquares,this.accumulatedMoments);if(this.centered){variables.push.apply(variables,__spread(this.accumulatedMeanGrads))}return[4,this.saveIterations()];case 1:return[2,[_a.sent()].concat(variables.map(function(v){return{name:v.originalName,tensor:v.variable}}))]}})})};RMSPropOptimizer.prototype.setWeights=function(weightValues){return __awaiter(this,void 0,void 0,function(){var variableCount,trainable;return __generator(this,function(_a){switch(_a.label){case 0:return[4,this.extractIterations(weightValues)];case 1:weightValues=_a.sent();variableCount=this.centered?weightValues.length/3:weightValues.length/2;trainable=false;this.accumulatedMeanSquares=weightValues.slice(0,variableCount).map(function(v){return{originalName:v.name,variable:v.tensor.variable(trainable)}});this.accumulatedMoments=weightValues.slice(variableCount,variableCount*2).map(function(v){return{originalName:v.name,variable:v.tensor.variable(trainable)}});if(this.centered){this.accumulatedMeanGrads=weightValues.slice(variableCount*2,variableCount*3).map(function(v){return{originalName:v.name,variable:v.tensor.variable(trainable)}})}return[2]}})})};RMSPropOptimizer.prototype.getConfig=function(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}};RMSPropOptimizer.fromConfig=function(cls,config){return new cls(config["learningRate"],config["decay"],config["momentum"],config["epsilon"],config["centered"])};return RMSPropOptimizer}(Optimizer);RMSPropOptimizer.className="RMSProp";registerClass(RMSPropOptimizer);var OptimizerConstructors=function(){function OptimizerConstructors(){}OptimizerConstructors.sgd=function(learningRate){return new SGDOptimizer(learningRate)};OptimizerConstructors.momentum=function(learningRate,momentum,useNesterov){if(useNesterov===void 0){useNesterov=false}return new MomentumOptimizer(learningRate,momentum,useNesterov)};OptimizerConstructors.rmsprop=function(learningRate,decay,momentum,epsilon,centered){if(decay===void 0){decay=.9}if(momentum===void 0){momentum=0}if(epsilon===void 0){epsilon=null}if(centered===void 0){centered=false}return new RMSPropOptimizer(learningRate,decay,momentum,epsilon,centered)};OptimizerConstructors.adam=function(learningRate,beta1,beta2,epsilon){if(learningRate===void 0){learningRate=.001}if(beta1===void 0){beta1=.9}if(beta2===void 0){beta2=.999}if(epsilon===void 0){epsilon=null}return new AdamOptimizer(learningRate,beta1,beta2,epsilon)};OptimizerConstructors.adadelta=function(learningRate,rho,epsilon){if(learningRate===void 0){learningRate=.001}if(rho===void 0){rho=.95}if(epsilon===void 0){epsilon=null}return new AdadeltaOptimizer(learningRate,rho,epsilon)};OptimizerConstructors.adamax=function(learningRate,beta1,beta2,epsilon,decay){if(learningRate===void 0){learningRate=.002}if(beta1===void 0){beta1=.9}if(beta2===void 0){beta2=.999}if(epsilon===void 0){epsilon=null}if(decay===void 0){decay=0}return new AdamaxOptimizer(learningRate,beta1,beta2,epsilon,decay)};OptimizerConstructors.adagrad=function(learningRate,initialAccumulatorValue){if(initialAccumulatorValue===void 0){initialAccumulatorValue=.1}return new AdagradOptimizer(learningRate,initialAccumulatorValue)};return OptimizerConstructors}();var train={sgd:OptimizerConstructors.sgd,momentum:OptimizerConstructors.momentum,adadelta:OptimizerConstructors.adadelta,adagrad:OptimizerConstructors.adagrad,rmsprop:OptimizerConstructors.rmsprop,adamax:OptimizerConstructors.adamax,adam:OptimizerConstructors.adam};var delayCallback=function(){if(typeof requestAnimationFrame!=="undefined"){return requestAnimationFrame}else if(typeof setImmediate!=="undefined"){return setImmediate}return function(f){return f()}}();function nextFrame(){return new Promise(function(resolve){return delayCallback(function(){return resolve()})})}function assertParamsConsistent(shapes,axis){var rank=shapes[0].length;shapes.forEach(function(shape,i){assert(shape.length===rank,function(){return"Error in concat"+rank+"D: rank of tensors["+i+"] must be the same "+("as the rank of the rest ("+rank+")")})});assert(axis>=0&&axis<rank,function(){return"Error in concat"+rank+"D: axis must be between 0 and "+(rank-1)+"."});var firstShape=shapes[0];shapes.forEach(function(shape,i){for(var r=0;r<rank;r++){assert(r===axis||shape[r]===firstShape[r],function(){return"Error in concat"+rank+"D: Shape of tensors["+i+"] ("+shape+") "+("does not match the shape of the rest ("+firstShape+") ")+("along the non-concatenated axis "+i+".")})}})}function computeOutShape$1(shapes,axis){var outputShape=shapes[0].slice();for(var i=1;i<shapes.length;i++){outputShape[axis]+=shapes[i][axis]}return outputShape}var PARALLELIZE_THRESHOLD=30;function computeOptimalWindowSize(inSize){if(inSize<=PARALLELIZE_THRESHOLD){return inSize}return nearestDivisor(inSize,Math.floor(Math.sqrt(inSize)))}function getImageCenter(center,imageHeight,imageWidth){var centerX=imageWidth*(typeof center==="number"?center:center[0]);var centerY=imageHeight*(typeof center==="number"?center:center[1]);return[centerX,centerY]}function getReshaped(inputShape,blockShape,prod,batchToSpace){if(batchToSpace===void 0){batchToSpace=true}var reshaped=[];if(batchToSpace){reshaped=reshaped.concat(blockShape.slice(0));reshaped.push(inputShape[0]/prod);reshaped=reshaped.concat(inputShape.slice(1))}else{reshaped=reshaped.concat(inputShape[0]);var spatialLength=blockShape.length;for(var i=0;i<spatialLength;++i){reshaped=reshaped.concat([inputShape[i+1]/blockShape[i],blockShape[i]])}reshaped=reshaped.concat(inputShape.slice(spatialLength+1))}return reshaped}function getPermuted(reshapedRank,blockShapeRank,batchToSpace){if(batchToSpace===void 0){batchToSpace=true}var permuted=[];if(batchToSpace){permuted.push(blockShapeRank);for(var i=blockShapeRank+1;i<reshapedRank;++i){if(i<=2*blockShapeRank){permuted.push(i);permuted.push(i-(blockShapeRank+1))}else{permuted.push(i)}}}else{var permutedBeforeBatch=[];var permutedAfterBatch=[];for(var i=1;i<reshapedRank;++i){if(i>=blockShapeRank*2+1||i%2===1){permutedAfterBatch.push(i)}else{permutedBeforeBatch.push(i)}}permuted.push.apply(permuted,__spread(permutedBeforeBatch));permuted.push(0);permuted.push.apply(permuted,__spread(permutedAfterBatch))}return permuted}function getReshapedPermuted(inputShape,blockShape,prod,batchToSpace){if(batchToSpace===void 0){batchToSpace=true}var reshapedPermuted=[];if(batchToSpace){reshapedPermuted.push(inputShape[0]/prod)}else{reshapedPermuted.push(inputShape[0]*prod)}for(var i=1;i<inputShape.length;++i){if(i<=blockShape.length){if(batchToSpace){reshapedPermuted.push(blockShape[i-1]*inputShape[i])}else{reshapedPermuted.push(inputShape[i]/blockShape[i-1])}}else{reshapedPermuted.push(inputShape[i])}}return reshapedPermuted}function getSliceBeginCoords(crops,blockShape){var sliceBeginCoords=[0];for(var i=0;i<blockShape;++i){sliceBeginCoords.push(crops[i][0])}return sliceBeginCoords}function getSliceSize(uncroppedShape,crops,blockShape){var sliceSize=uncroppedShape.slice(0,1);for(var i=0;i<blockShape;++i){sliceSize.push(uncroppedShape[i+1]-crops[i][0]-crops[i][1])}return sliceSize}var SELU_SCALEALPHA=1.7580993408473768;var SELU_SCALE=1.0507009873554805;var ERF_P=.3275911;var ERF_A1=.254829592;var ERF_A2=-.284496736;var ERF_A3=1.421413741;var ERF_A4=-1.453152027;var ERF_A5=1.061405429;function mergeRealAndImagArrays(real,imag){if(real.length!==imag.length){throw new Error("Cannot merge real and imag arrays of different lengths. real:"+(real.length+", imag: "+imag.length+"."))}var result=new Float32Array(real.length*2);for(var i=0;i<result.length;i+=2){result[i]=real[i/2];result[i+1]=imag[i/2]}return result}function splitRealAndImagArrays(complex){var real=new Float32Array(complex.length/2);var imag=new Float32Array(complex.length/2);for(var i=0;i<complex.length;i+=2){real[i/2]=complex[i];imag[i/2]=complex[i+1]}return{real:real,imag:imag}}function complexWithEvenIndex(complex){var len=Math.ceil(complex.length/4);var real=new Float32Array(len);var imag=new Float32Array(len);for(var i=0;i<complex.length;i+=4){real[Math.floor(i/4)]=complex[i];imag[Math.floor(i/4)]=complex[i+1]}return{real:real,imag:imag}}function complexWithOddIndex(complex){var len=Math.floor(complex.length/4);var real=new Float32Array(len);var imag=new Float32Array(len);for(var i=2;i<complex.length;i+=4){real[Math.floor(i/4)]=complex[i];imag[Math.floor(i/4)]=complex[i+1]}return{real:real,imag:imag}}function getComplexWithIndex(complex,index){var real=complex[index*2];var imag=complex[index*2+1];return{real:real,imag:imag}}function assignToTypedArray(data,real,imag,index){data[index*2]=real;data[index*2+1]=imag}function exponents(n,inverse){var real=new Float32Array(n/2);var imag=new Float32Array(n/2);for(var i=0;i<Math.ceil(n/2);i++){var x=(inverse?2:-2)*Math.PI*(i/n);real[i]=Math.cos(x);imag[i]=Math.sin(x)}return{real:real,imag:imag}}function exponent(k,n,inverse){var x=(inverse?2:-2)*Math.PI*(k/n);var real=Math.cos(x);var imag=Math.sin(x);return{real:real,imag:imag}}var ARROW="->";var ARROW_REGEX=/->/g;var COMMA=",";var ELLIPSIS="...";function decodeEinsumEquation(equation,numTensors){equation=equation.replace(/\s/g,"");var numArrows=(equation.length-equation.replace(ARROW_REGEX,"").length)/ARROW.length;if(numArrows<1){throw new Error("Equations without an arrow are not supported.")}else if(numArrows>1){throw new Error('Equation must contain exactly one arrow ("'+ARROW+'").')}var _a=__read(equation.split(ARROW),2),inputString=_a[0],outputString=_a[1];assert(inputString.indexOf(ELLIPSIS)===-1,function(){return'The ellipsis notation ("'+ELLIPSIS+'") is not supported yet.'});var inputTerms=inputString.split(COMMA);var numInputs=inputTerms.length;if(numTensors!==numInputs){throw new Error("Expected "+numInputs+" input tensors, received "+numTensors)}if(numInputs>2){throw new Error("Support for more than 2 input tensors is not implemented yet.")}var allDims=[];var _loop_1=function(i){var dimName=outputString[i];if(!inputTerms.some(function(inputTerm){return inputTerm.indexOf(dimName)!==-1})){throw new Error("Output subscripts contain the label "+dimName+" "+"not present in the input subscripts.")}if(allDims.indexOf(dimName)===-1){allDims.push(dimName)}};for(var i=0;i<outputString.length;++i){_loop_1(i)}for(var i=0;i<inputString.length;++i){var dimName=inputString[i];if(allDims.indexOf(dimName)===-1&&dimName!==COMMA){allDims.push(dimName)}}var idDims=new Array(inputTerms.length);for(var i=0;i<numInputs;++i){if(new Set(inputTerms[i].split("")).size!==inputTerms[i].length){throw new Error("Found duplicate axes in input component "+inputTerms[i]+". "+"Support for duplicate axes in input is not implemented yet.")}idDims[i]=[];for(var j=0;j<inputTerms[i].length;++j){idDims[i].push(allDims.indexOf(inputTerms[i][j]))}}var numDims=allDims.length;var numOutDims=outputString.length;var summedDims=[];for(var i=numOutDims;i<numDims;++i){summedDims.push(i)}return{allDims:allDims,summedDims:summedDims,idDims:idDims}}function getEinsumPermutation(nDims,idDims){var permutationIndices=new Array(nDims);permutationIndices.fill(-1);for(var i=0;i<idDims.length;++i){permutationIndices[idDims[i]]=i}var expandDims=[];for(var i=0;i<nDims;++i){if(permutationIndices[i]===-1){expandDims.push(i)}}permutationIndices=permutationIndices.filter(function(d){return d!==-1});return{permutationIndices:permutationIndices,expandDims:expandDims}}function checkEinsumDimSizes(nDims,idDims,tensors){var dimSizes=new Array(nDims);var _loop_2=function(i){var shape=tensors[i].shape;var _loop_3=function(j){if(dimSizes[idDims[i][j]]===undefined){dimSizes[idDims[i][j]]=shape[j]}else{assert(dimSizes[idDims[i][j]]===shape[j],function(){return"Expected dimension "+dimSizes[idDims[i][j]]+" at axis "+j+" "+("of input shaped "+JSON.stringify(shape)+", ")+("but got dimension "+shape[j])})}};for(var j=0;j<idDims[i].length;++j){_loop_3(j)}};for(var i=0;i<tensors.length;++i){_loop_2(i)}}function getEinsumComputePath(summedDims,idDims){var e_1,_a;var path=summedDims;var steps=[];var nSteps=0;if(summedDims.length===0){path.push(-1)}nSteps=summedDims.length+1;for(var i=0;i<nSteps;++i){steps.push([])}var computedTermIndices=[];for(var i=0;i<path.length;++i){var summedDim=path[i];var termIndices=findTermsWithDim(idDims,summedDim);try{for(var termIndices_1=(e_1=void 0,__values(termIndices)),termIndices_1_1=termIndices_1.next();!termIndices_1_1.done;termIndices_1_1=termIndices_1.next()){var termIndex=termIndices_1_1.value;if(computedTermIndices.indexOf(termIndex)===-1){steps[i].push(termIndex);computedTermIndices.push(termIndex)}}}catch(e_1_1){e_1={error:e_1_1}}finally{try{if(termIndices_1_1&&!termIndices_1_1.done&&(_a=termIndices_1.return))_a.call(termIndices_1)}finally{if(e_1)throw e_1.error}}}return{path:path,steps:steps}}function isIdentityPermutation(perm){return perm.every(function(dim,index){return dim===index})}function findTermsWithDim(idDims,dim){var termIndices=[];for(var i=0;i<idDims.length;++i){if(idDims[i].length===0||idDims[i].indexOf(dim)!==-1||dim===-1){termIndices.push(i)}}return termIndices}function prepareSplitSize(x,numOrSizeSplits,axis){if(axis===void 0){axis=0}var splitSizes=[];if(typeof numOrSizeSplits==="number"){assert(x.shape[axis]%numOrSizeSplits===0,function(){return"Number of splits must evenly divide the axis."});splitSizes=new Array(numOrSizeSplits).fill(x.shape[axis]/numOrSizeSplits)}else{var numOfNegs=numOrSizeSplits.reduce(function(count,value){if(value===-1){count+=1}return count},0);assert(numOfNegs<=1,function(){return"There should be only one negative value in split array."});var negIndex=numOrSizeSplits.indexOf(-1);if(negIndex!==-1){var total=numOrSizeSplits.reduce(function(a,b){return b>0?a+b:a});numOrSizeSplits[negIndex]=x.shape[axis]-total}assert(x.shape[axis]===numOrSizeSplits.reduce(function(a,b){return a+b}),function(){return"The sum of sizes must match the size of the axis dimension."});splitSizes=numOrSizeSplits}return splitSizes}function segOpComputeOptimalWindowSize(inSize,numSegments){var done=false;var res;if(inSize<=PARALLELIZE_THRESHOLD){res=inSize;done=true}else{res=nearestDivisor(inSize,Math.floor(Math.sqrt(inSize)))}while(!done){if(res>numSegments||res===inSize){done=true}else{res=nearestDivisor(inSize,res+1)}}return res}function computeOutShape(aShape,axis,numSegments){var outShape=[];var rank=aShape.length;for(var dim=0;dim<rank;dim++){if(dim!==axis){outShape.push(aShape[dim])}else{outShape.push(numSegments)}}return outShape}function collectGatherOpShapeInfo(x,indices,axis,batchDims){var indicesRank=indices.shape.length;var xRank=x.shape.length;if(batchDims!==0){if(batchDims<-indicesRank||batchDims>indicesRank){throw new Error("Expect batchDims in the range of [-"+indicesRank+", "+indicesRank+"], but got "+batchDims)}}if(batchDims<0){batchDims+=indicesRank}if(batchDims>xRank){throw new Error("batchDims ("+batchDims+") must be less than rank(x) (\n    "+xRank+").")}if(axis<batchDims){throw new Error("batchDims ("+batchDims+") must be less than or equal to axis ("+axis+").")}for(var i=0;i<batchDims;++i){if(x.shape[i]!==indices.shape[i]){throw new Error("x.shape["+i+"]: "+x.shape[i]+" should be equal to indices.shape["+i+"]: "+indices.shape[i]+".")}}var dimSize=x.shape[axis];var outputShape=[];var batchSize=1;var outerSize=1;var sliceSize=1;for(var i=0;i<batchDims;++i){outputShape.push(x.shape[i]);batchSize*=x.shape[i]}for(var i=batchDims;i<axis;i++){outputShape.push(x.shape[i]);outerSize*=x.shape[i]}for(var i=batchDims;i<indicesRank;i++){outputShape.push(indices.shape[i])}for(var i=axis+1;i<xRank;i++){outputShape.push(x.shape[i]);sliceSize*=x.shape[i]}return{batchSize:batchSize,sliceSize:sliceSize,outerSize:outerSize,dimSize:dimSize,outputShape:outputShape}}var segment_util={__proto__:null,segOpComputeOptimalWindowSize:segOpComputeOptimalWindowSize,computeOutShape:computeOutShape,collectGatherOpShapeInfo:collectGatherOpShapeInfo};function fromUint8ToStringArray(vals){try{return vals.map(function(val){return decodeString(val)})}catch(err){throw new Error("Failed to decode encoded string bytes into utf-8, error: "+err)}}function fromStringArrayToUint8(strings){return strings.map(function(s){return encodeString(s)})}var backend_util={__proto__:null,slice_util:slice_util,segment_util:segment_util,fromUint8ToStringArray:fromUint8ToStringArray,fromStringArrayToUint8:fromStringArrayToUint8,upcastType:upcastType,axesAreInnerMostDims:axesAreInnerMostDims,combineLocations:combineLocations,computeOutAndReduceShapes:computeOutAndReduceShapes,expandShapeToKeepDim:expandShapeToKeepDim,assertAxesAreInnerMostDims:assertAxesAreInnerMostDims,getAxesPermutation:getAxesPermutation,getUndoAxesPermutation:getUndoAxesPermutation,getInnerMostAxes:getInnerMostAxes,getBroadcastDims:getBroadcastDims,getReductionAxes:getReductionAxes,assertAndGetBroadcastShape:assertAndGetBroadcastShape,assertParamsConsistent:assertParamsConsistent,computeOutShape:computeOutShape$1,computeDilation2DInfo:computeDilation2DInfo,computePool2DInfo:computePool2DInfo,computePool3DInfo:computePool3DInfo,computeConv2DInfo:computeConv2DInfo,computeConv3DInfo:computeConv3DInfo,computeDefaultPad:computeDefaultPad,tupleValuesAreOne:tupleValuesAreOne,eitherStridesOrDilationsAreOne:eitherStridesOrDilationsAreOne,convertConv2DDataFormat:convertConv2DDataFormat,getFusedDyActivation:getFusedDyActivation,getFusedBiasGradient:getFusedBiasGradient,applyActivation:applyActivation,shouldFuse:shouldFuse,PARALLELIZE_THRESHOLD:PARALLELIZE_THRESHOLD,computeOptimalWindowSize:computeOptimalWindowSize,getImageCenter:getImageCenter,getReshaped:getReshaped,getPermuted:getPermuted,getReshapedPermuted:getReshapedPermuted,getSliceBeginCoords:getSliceBeginCoords,getSliceSize:getSliceSize,prepareAndValidate:prepareAndValidate,validateUpdateShape:validateUpdateShape,validateInput:validateInput$1,calculateShapes:calculateShapes,SELU_SCALEALPHA:SELU_SCALEALPHA,SELU_SCALE:SELU_SCALE,ERF_P:ERF_P,ERF_A1:ERF_A1,ERF_A2:ERF_A2,ERF_A3:ERF_A3,ERF_A4:ERF_A4,ERF_A5:ERF_A5,warn:warn,log:log$1,mergeRealAndImagArrays:mergeRealAndImagArrays,splitRealAndImagArrays:splitRealAndImagArrays,complexWithEvenIndex:complexWithEvenIndex,complexWithOddIndex:complexWithOddIndex,getComplexWithIndex:getComplexWithIndex,assignToTypedArray:assignToTypedArray,exponents:exponents,exponent:exponent,decodeEinsumEquation:decodeEinsumEquation,getEinsumPermutation:getEinsumPermutation,checkEinsumDimSizes:checkEinsumDimSizes,getEinsumComputePath:getEinsumComputePath,isIdentityPermutation:isIdentityPermutation,prepareSplitSize:prepareSplitSize};var kernel_impls={__proto__:null,nonMaxSuppressionV3Impl:nonMaxSuppressionV3Impl,nonMaxSuppressionV4Impl:nonMaxSuppressionV4Impl,nonMaxSuppressionV5Impl:nonMaxSuppressionV5Impl,whereImpl:whereImpl};exports.Abs=Abs;exports.Acos=Acos;exports.Acosh=Acosh;exports.AdadeltaOptimizer=AdadeltaOptimizer;exports.AdagradOptimizer=AdagradOptimizer;exports.AdamOptimizer=AdamOptimizer;exports.AdamaxOptimizer=AdamaxOptimizer;exports.Add=Add;exports.AddN=AddN;exports.All=All;exports.Any=Any;exports.ArgMax=ArgMax;exports.ArgMin=ArgMin;exports.Asin=Asin;exports.Asinh=Asinh;exports.Atan=Atan;exports.Atan2=Atan2;exports.Atanh=Atanh;exports.AvgPool=AvgPool;exports.AvgPool3D=AvgPool3D;exports.AvgPool3DGrad=AvgPool3DGrad;exports.AvgPoolGrad=AvgPoolGrad;exports.BatchMatMul=BatchMatMul;exports.BatchToSpaceND=BatchToSpaceND;exports.Bincount=Bincount;exports.BroadcastArgs=BroadcastArgs;exports.BroadcastTo=BroadcastTo;exports.Cast=Cast;exports.Ceil=Ceil;exports.ClipByValue=ClipByValue;exports.Complex=Complex;exports.ComplexAbs=ComplexAbs;exports.Concat=Concat;exports.Conv2D=Conv2D;exports.Conv2DBackpropFilter=Conv2DBackpropFilter;exports.Conv2DBackpropInput=Conv2DBackpropInput;exports.Conv3D=Conv3D;exports.Conv3DBackpropFilterV2=Conv3DBackpropFilterV2;exports.Conv3DBackpropInputV2=Conv3DBackpropInputV2;exports.Cos=Cos;exports.Cosh=Cosh;exports.CropAndResize=CropAndResize;exports.Cumsum=Cumsum;exports.DataStorage=DataStorage;exports.DenseBincount=DenseBincount;exports.DepthToSpace=DepthToSpace;exports.DepthwiseConv2dNative=DepthwiseConv2dNative;exports.DepthwiseConv2dNativeBackpropFilter=DepthwiseConv2dNativeBackpropFilter;exports.DepthwiseConv2dNativeBackpropInput=DepthwiseConv2dNativeBackpropInput;exports.Diag=Diag;exports.Dilation2D=Dilation2D;exports.Dilation2DBackpropFilter=Dilation2DBackpropFilter;exports.Dilation2DBackpropInput=Dilation2DBackpropInput;exports.Einsum=Einsum;exports.Elu=Elu;exports.EluGrad=EluGrad;exports.Environment=Environment;exports.Equal=Equal;exports.Erf=Erf;exports.Exp=Exp;exports.ExpandDims=ExpandDims;exports.Expm1=Expm1;exports.FFT=FFT;exports.Fill=Fill;exports.FlipLeftRight=FlipLeftRight;exports.Floor=Floor;exports.FloorDiv=FloorDiv;exports.FromPixels=FromPixels;exports.FusedBatchNorm=FusedBatchNorm;exports.FusedConv2D=FusedConv2D;exports.FusedDepthwiseConv2D=FusedDepthwiseConv2D;exports.GatherNd=GatherNd;exports.GatherV2=GatherV2;exports.Greater=Greater;exports.GreaterEqual=GreaterEqual;exports.IFFT=IFFT;exports.Identity=Identity;exports.Imag=Imag;exports.IsFinite=IsFinite;exports.IsInf=IsInf;exports.IsNan=IsNan;exports.KernelBackend=KernelBackend;exports.LRN=LRN;exports.LRNGrad=LRNGrad;exports.LeakyRelu=LeakyRelu;exports.Less=Less;exports.LessEqual=LessEqual;exports.LinSpace=LinSpace;exports.Log=Log;exports.Log1p=Log1p;exports.LogSoftmax=LogSoftmax;exports.LogicalAnd=LogicalAnd;exports.LogicalNot=LogicalNot;exports.LogicalOr=LogicalOr;exports.Max=Max;exports.MaxPool=MaxPool;exports.MaxPool3D=MaxPool3D;exports.MaxPool3DGrad=MaxPool3DGrad;exports.MaxPoolGrad=MaxPoolGrad;exports.MaxPoolWithArgmax=MaxPoolWithArgmax;exports.Maximum=Maximum;exports.Mean=Mean;exports.Min=Min;exports.Minimum=Minimum;exports.MirrorPad=MirrorPad;exports.Mod=Mod;exports.MomentumOptimizer=MomentumOptimizer;exports.Multinomial=Multinomial;exports.Multiply=Multiply;exports.Neg=Neg;exports.NonMaxSuppressionV3=NonMaxSuppressionV3;exports.NonMaxSuppressionV4=NonMaxSuppressionV4;exports.NonMaxSuppressionV5=NonMaxSuppressionV5;exports.NotEqual=NotEqual;exports.OP_SCOPE_SUFFIX=OP_SCOPE_SUFFIX;exports.OneHot=OneHot;exports.OnesLike=OnesLike;exports.Optimizer=Optimizer;exports.Pack=Pack;exports.PadV2=PadV2;exports.Pool=Pool;exports.Pow=Pow;exports.Prelu=Prelu;exports.Prod=Prod;exports.RMSPropOptimizer=RMSPropOptimizer;exports.Range=Range;exports.Real=Real;exports.RealDiv=RealDiv;exports.Reciprocal=Reciprocal;exports.Relu=Relu;exports.Relu6=Relu6;exports.Reshape=Reshape;exports.ResizeBilinear=ResizeBilinear;exports.ResizeBilinearGrad=ResizeBilinearGrad;exports.ResizeNearestNeighbor=ResizeNearestNeighbor;exports.ResizeNearestNeighborGrad=ResizeNearestNeighborGrad;exports.Reverse=Reverse;exports.RotateWithOffset=RotateWithOffset;exports.Round=Round;exports.Rsqrt=Rsqrt;exports.SGDOptimizer=SGDOptimizer;exports.ScatterNd=ScatterNd;exports.Select=Select;exports.Selu=Selu;exports.Sigmoid=Sigmoid;exports.Sign=Sign;exports.Sin=Sin;exports.Sinh=Sinh;exports.Slice=Slice;exports.Softmax=Softmax;exports.Softplus=Softplus;exports.SpaceToBatchND=SpaceToBatchND;exports.SparseFillEmptyRows=SparseFillEmptyRows;exports.SparseReshape=SparseReshape;exports.SparseSegmentMean=SparseSegmentMean;exports.SparseSegmentSum=SparseSegmentSum;exports.SparseToDense=SparseToDense;exports.SplitV=SplitV;exports.Sqrt=Sqrt;exports.Square=Square;exports.SquaredDifference=SquaredDifference;exports.Step=Step;exports.StridedSlice=StridedSlice;exports.StringNGrams=StringNGrams;exports.StringSplit=StringSplit;exports.StringToHashBucketFast=StringToHashBucketFast;exports.Sub=Sub;exports.Sum=Sum;exports.Tan=Tan;exports.Tanh=Tanh;exports.Tensor=Tensor;exports.TensorBuffer=TensorBuffer;exports.Tile=Tile;exports.TopK=TopK;exports.Transform=Transform;exports.Transpose=Transpose;exports.Unique=Unique;exports.Unpack=Unpack;exports.UnsortedSegmentSum=UnsortedSegmentSum;exports.Variable=Variable;exports.ZerosLike=ZerosLike;exports._FusedMatMul=_FusedMatMul;exports.abs=abs;exports.acos=acos;exports.acosh=acosh;exports.add=add;exports.addN=addN;exports.all=all;exports.any=any;exports.argMax=argMax;exports.argMin=argMin;exports.asin=asin;exports.asinh=asinh;exports.atan=atan;exports.atan2=atan2;exports.atanh=atanh;exports.avgPool=avgPool;exports.avgPool3d=avgPool3d;exports.backend=backend;exports.backend_util=backend_util;exports.basicLSTMCell=basicLSTMCell;exports.batchNorm=batchNorm;exports.batchNorm2d=batchNorm2d;exports.batchNorm3d=batchNorm3d;exports.batchNorm4d=batchNorm4d;exports.batchToSpaceND=batchToSpaceND;exports.bincount=bincount;exports.booleanMaskAsync=booleanMaskAsync;exports.broadcastArgs=broadcastArgs;exports.broadcastTo=broadcastTo;exports.browser=browser;exports.buffer=buffer;exports.cast=cast;exports.ceil=ceil;exports.clipByValue=clipByValue;exports.clone=clone;exports.complex=complex;exports.concat=concat;exports.concat1d=concat1d;exports.concat2d=concat2d;exports.concat3d=concat3d;exports.concat4d=concat4d;exports.conv1d=conv1d;exports.conv2d=conv2d$1;exports.conv2dTranspose=conv2dTranspose;exports.conv3d=conv3d;exports.conv3dTranspose=conv3dTranspose;exports.copyRegisteredKernels=copyRegisteredKernels;exports.cos=cos;exports.cosh=cosh;exports.cosineWindow=cosineWindow;exports.cumsum=cumsum;exports.customGrad=customGrad;exports.denseBincount=denseBincount;exports.deprecationWarn=deprecationWarn;exports.depthToSpace=depthToSpace;exports.depthwiseConv2d=depthwiseConv2d$1;exports.device_util=device_util;exports.diag=diag;exports.dilation2d=dilation2d;exports.disableDeprecationWarnings=disableDeprecationWarnings;exports.dispose=dispose;exports.disposeVariables=disposeVariables;exports.div=div;exports.divNoNan=divNoNan;exports.dot=dot;exports.dropout=dropout;exports.einsum=einsum;exports.elu=elu;exports.enableDebugMode=enableDebugMode;exports.enableProdMode=enableProdMode;exports.enclosingPowerOfTwo=enclosingPowerOfTwo;exports.engine=engine;exports.env=env;exports.equal=equal;exports.erf=erf;exports.exp=exp;exports.expandDims=expandDims;exports.expm1=expm1;exports.eye=eye;exports.fft=fft;exports.fill=fill;exports.findBackend=findBackend;exports.findBackendFactory=findBackendFactory;exports.floor=floor;exports.floorDiv=floorDiv;exports.fused=fused_ops;exports.gather=gather;exports.gatherND=gatherND;exports.gather_util=gather_nd_util;exports.getBackend=getBackend;exports.getGradient=getGradient;exports.getKernel=getKernel;exports.getKernelsForBackend=getKernelsForBackend;exports.grad=grad;exports.grads=grads;exports.greater=greater;exports.greaterEqual=greaterEqual;exports.ifft=ifft;exports.imag=imag;exports.image=image;exports.inTopKAsync=inTopKAsync;exports.io=io;exports.irfft=irfft;exports.isFinite=isFinite$1;exports.isInf=isInf;exports.isNaN=isNaN$1;exports.keep=keep;exports.kernel_impls=kernel_impls;exports.leakyRelu=leakyRelu;exports.less=less;exports.lessEqual=lessEqual;exports.linalg=linalg;exports.linspace=linspace;exports.localResponseNormalization=localResponseNormalization;exports.log=log;exports.log1p=log1p;exports.logSigmoid=logSigmoid;exports.logSoftmax=logSoftmax;exports.logSumExp=logSumExp;exports.logicalAnd=logicalAnd;exports.logicalNot=logicalNot;exports.logicalOr=logicalOr;exports.logicalXor=logicalXor;exports.losses=losses;exports.matMul=matMul$1;exports.math=math;exports.max=max;exports.maxPool=maxPool;exports.maxPool3d=maxPool3d;exports.maxPoolWithArgmax=maxPoolWithArgmax;exports.maximum=maximum;exports.mean=mean;exports.memory=memory;exports.meshgrid=meshgrid;exports.min=min;exports.minimum=minimum;exports.mirrorPad=mirrorPad;exports.mod=mod;exports.moments=moments;exports.movingAverage=movingAverage;exports.mul=mul;exports.multiRNNCell=multiRNNCell;exports.multinomial=multinomial;exports.neg=neg;exports.nextFrame=nextFrame;exports.norm=norm;exports.notEqual=notEqual;exports.oneHot=oneHot;exports.ones=ones;exports.onesLike=onesLike;exports.op=op;exports.outerProduct=outerProduct;exports.pad=pad;exports.pad1d=pad1d;exports.pad2d=pad2d;exports.pad3d=pad3d;exports.pad4d=pad4d;exports.pool=pool;exports.pow=pow;exports.prelu=prelu;exports.print=print;exports.prod=prod;exports.profile=profile;exports.rand=rand;exports.randomGamma=randomGamma;exports.randomNormal=randomNormal;exports.randomUniform=randomUniform;exports.range=range;exports.ready=ready;exports.real=real;exports.reciprocal=reciprocal;exports.registerBackend=registerBackend;exports.registerGradient=registerGradient;exports.registerKernel=registerKernel;exports.relu=relu;exports.relu6=relu6;exports.removeBackend=removeBackend;exports.reshape=reshape;exports.reverse=reverse;exports.reverse1d=reverse1d;exports.reverse2d=reverse2d;exports.reverse3d=reverse3d;exports.reverse4d=reverse4d;exports.rfft=rfft;exports.round=round;exports.rsqrt=rsqrt;exports.scalar=scalar;exports.scatterND=scatterND;exports.scatter_util=scatter_nd_util;exports.selu=selu;exports.separableConv2d=separableConv2d;exports.serialization=serialization;exports.setBackend=setBackend;exports.setPlatform=setPlatform;exports.setdiff1dAsync=setdiff1dAsync;exports.sigmoid=sigmoid;exports.sign=sign;exports.signal=signal;exports.sin=sin;exports.sinh=sinh;exports.slice=slice;exports.slice1d=slice1d;exports.slice2d=slice2d;exports.slice3d=slice3d;exports.slice4d=slice4d;exports.slice_util=slice_util;exports.softmax=softmax;exports.softplus=softplus;exports.spaceToBatchND=spaceToBatchND;exports.sparse=sparse;exports.sparseToDense=sparseToDense;exports.spectral=spectral;exports.split=split;exports.sqrt=sqrt;exports.square=square;exports.squaredDifference=squaredDifference;exports.squeeze=squeeze;exports.stack=stack;exports.step=step;exports.stridedSlice=stridedSlice;exports.string=string;exports.sub=sub;exports.sum=sum;exports.sumOutType=sumOutType;exports.tan=tan;exports.tanh=tanh;exports.tensor=tensor;exports.tensor1d=tensor1d;exports.tensor2d=tensor2d;exports.tensor3d=tensor3d;exports.tensor4d=tensor4d;exports.tensor5d=tensor5d;exports.tensor6d=tensor6d;exports.tensor_util=tensor_util;exports.test_util=test_util;exports.tidy=tidy;exports.tile=tile;exports.time=time;exports.topk=topk;exports.train=train;exports.transpose=transpose;exports.truncatedNormal=truncatedNormal;exports.unique=unique;exports.unregisterGradient=unregisterGradient;exports.unregisterKernel=unregisterKernel;exports.unsortedSegmentSum=unsortedSegmentSum;exports.unstack=unstack;exports.upcastType=upcastType;exports.util=util;exports.valueAndGrad=valueAndGrad;exports.valueAndGrads=valueAndGrads;exports.variable=variable;exports.variableGrads=variableGrads;exports.version_core=version;exports.where=where;exports.whereAsync=whereAsync;exports.zeros=zeros;exports.zerosLike=zerosLike}).call(this)}).call(this,require("_process"),typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],require("timers").setImmediate)},{_process:40,buffer:38,crypto:37,"node-fetch":37,timers:49,util:37}],36:[function(require,module,exports){"use strict";exports.byteLength=byteLength;exports.toByteArray=toByteArray;exports.fromByteArray=fromByteArray;var lookup=[];var revLookup=[];var Arr=typeof Uint8Array!=="undefined"?Uint8Array:Array;var code="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(var i=0,len=code.length;i<len;++i){lookup[i]=code[i];revLookup[code.charCodeAt(i)]=i}revLookup["-".charCodeAt(0)]=62;revLookup["_".charCodeAt(0)]=63;function getLens(b64){var len=b64.length;if(len%4>0){throw new Error("Invalid string. Length must be a multiple of 4")}var validLen=b64.indexOf("=");if(validLen===-1)validLen=len;var placeHoldersLen=validLen===len?0:4-validLen%4;return[validLen,placeHoldersLen]}function byteLength(b64){var lens=getLens(b64);var validLen=lens[0];var placeHoldersLen=lens[1];return(validLen+placeHoldersLen)*3/4-placeHoldersLen}function _byteLength(b64,validLen,placeHoldersLen){return(validLen+placeHoldersLen)*3/4-placeHoldersLen}function toByteArray(b64){var tmp;var lens=getLens(b64);var validLen=lens[0];var placeHoldersLen=lens[1];var arr=new Arr(_byteLength(b64,validLen,placeHoldersLen));var curByte=0;var len=placeHoldersLen>0?validLen-4:validLen;var i;for(i=0;i<len;i+=4){tmp=revLookup[b64.charCodeAt(i)]<<18|revLookup[b64.charCodeAt(i+1)]<<12|revLookup[b64.charCodeAt(i+2)]<<6|revLookup[b64.charCodeAt(i+3)];arr[curByte++]=tmp>>16&255;arr[curByte++]=tmp>>8&255;arr[curByte++]=tmp&255}if(placeHoldersLen===2){tmp=revLookup[b64.charCodeAt(i)]<<2|revLookup[b64.charCodeAt(i+1)]>>4;arr[curByte++]=tmp&255}if(placeHoldersLen===1){tmp=revLookup[b64.charCodeAt(i)]<<10|revLookup[b64.charCodeAt(i+1)]<<4|revLookup[b64.charCodeAt(i+2)]>>2;arr[curByte++]=tmp>>8&255;arr[curByte++]=tmp&255}return arr}function tripletToBase64(num){return lookup[num>>18&63]+lookup[num>>12&63]+lookup[num>>6&63]+lookup[num&63]}function encodeChunk(uint8,start,end){var tmp;var output=[];for(var i=start;i<end;i+=3){tmp=(uint8[i]<<16&16711680)+(uint8[i+1]<<8&65280)+(uint8[i+2]&255);output.push(tripletToBase64(tmp))}return output.join("")}function fromByteArray(uint8){var tmp;var len=uint8.length;var extraBytes=len%3;var parts=[];var maxChunkLength=16383;for(var i=0,len2=len-extraBytes;i<len2;i+=maxChunkLength){parts.push(encodeChunk(uint8,i,i+maxChunkLength>len2?len2:i+maxChunkLength))}if(extraBytes===1){tmp=uint8[len-1];parts.push(lookup[tmp>>2]+lookup[tmp<<4&63]+"==")}else if(extraBytes===2){tmp=(uint8[len-2]<<8)+uint8[len-1];parts.push(lookup[tmp>>10]+lookup[tmp>>4&63]+lookup[tmp<<2&63]+"=")}return parts.join("")}},{}],37:[function(require,module,exports){},{}],38:[function(require,module,exports){(function(Buffer){(function(){"use strict";var base64=require("base64-js");var ieee754=require("ieee754");exports.Buffer=Buffer;exports.SlowBuffer=SlowBuffer;exports.INSPECT_MAX_BYTES=50;var K_MAX_LENGTH=2147483647;exports.kMaxLength=K_MAX_LENGTH;Buffer.TYPED_ARRAY_SUPPORT=typedArraySupport();if(!Buffer.TYPED_ARRAY_SUPPORT&&typeof console!=="undefined"&&typeof console.error==="function"){console.error("This browser lacks typed array (Uint8Array) support which is required by "+"`buffer` v5.x. Use `buffer` v4.x if you require old browser support.")}function typedArraySupport(){try{var arr=new Uint8Array(1);arr.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}};return arr.foo()===42}catch(e){return false}}Object.defineProperty(Buffer.prototype,"parent",{enumerable:true,get:function(){if(!Buffer.isBuffer(this))return undefined;return this.buffer}});Object.defineProperty(Buffer.prototype,"offset",{enumerable:true,get:function(){if(!Buffer.isBuffer(this))return undefined;return this.byteOffset}});function createBuffer(length){if(length>K_MAX_LENGTH){throw new RangeError('The value "'+length+'" is invalid for option "size"')}var buf=new Uint8Array(length);buf.__proto__=Buffer.prototype;return buf}function Buffer(arg,encodingOrOffset,length){if(typeof arg==="number"){if(typeof encodingOrOffset==="string"){throw new TypeError('The "string" argument must be of type string. Received type number')}return allocUnsafe(arg)}return from(arg,encodingOrOffset,length)}if(typeof Symbol!=="undefined"&&Symbol.species!=null&&Buffer[Symbol.species]===Buffer){Object.defineProperty(Buffer,Symbol.species,{value:null,configurable:true,enumerable:false,writable:false})}Buffer.poolSize=8192;function from(value,encodingOrOffset,length){if(typeof value==="string"){return fromString(value,encodingOrOffset)}if(ArrayBuffer.isView(value)){return fromArrayLike(value)}if(value==null){throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, "+"or Array-like Object. Received type "+typeof value)}if(isInstance(value,ArrayBuffer)||value&&isInstance(value.buffer,ArrayBuffer)){return fromArrayBuffer(value,encodingOrOffset,length)}if(typeof value==="number"){throw new TypeError('The "value" argument must not be of type number. Received type number')}var valueOf=value.valueOf&&value.valueOf();if(valueOf!=null&&valueOf!==value){return Buffer.from(valueOf,encodingOrOffset,length)}var b=fromObject(value);if(b)return b;if(typeof Symbol!=="undefined"&&Symbol.toPrimitive!=null&&typeof value[Symbol.toPrimitive]==="function"){return Buffer.from(value[Symbol.toPrimitive]("string"),encodingOrOffset,length)}throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, "+"or Array-like Object. Received type "+typeof value)}Buffer.from=function(value,encodingOrOffset,length){return from(value,encodingOrOffset,length)};Buffer.prototype.__proto__=Uint8Array.prototype;Buffer.__proto__=Uint8Array;function assertSize(size){if(typeof size!=="number"){throw new TypeError('"size" argument must be of type number')}else if(size<0){throw new RangeError('The value "'+size+'" is invalid for option "size"')}}function alloc(size,fill,encoding){assertSize(size);if(size<=0){return createBuffer(size)}if(fill!==undefined){return typeof encoding==="string"?createBuffer(size).fill(fill,encoding):createBuffer(size).fill(fill)}return createBuffer(size)}Buffer.alloc=function(size,fill,encoding){return alloc(size,fill,encoding)};function allocUnsafe(size){assertSize(size);return createBuffer(size<0?0:checked(size)|0)}Buffer.allocUnsafe=function(size){return allocUnsafe(size)};Buffer.allocUnsafeSlow=function(size){return allocUnsafe(size)};function fromString(string,encoding){if(typeof encoding!=="string"||encoding===""){encoding="utf8"}if(!Buffer.isEncoding(encoding)){throw new TypeError("Unknown encoding: "+encoding)}var length=byteLength(string,encoding)|0;var buf=createBuffer(length);var actual=buf.write(string,encoding);if(actual!==length){buf=buf.slice(0,actual)}return buf}function fromArrayLike(array){var length=array.length<0?0:checked(array.length)|0;var buf=createBuffer(length);for(var i=0;i<length;i+=1){buf[i]=array[i]&255}return buf}function fromArrayBuffer(array,byteOffset,length){if(byteOffset<0||array.byteLength<byteOffset){throw new RangeError('"offset" is outside of buffer bounds')}if(array.byteLength<byteOffset+(length||0)){throw new RangeError('"length" is outside of buffer bounds')}var buf;if(byteOffset===undefined&&length===undefined){buf=new Uint8Array(array)}else if(length===undefined){buf=new Uint8Array(array,byteOffset)}else{buf=new Uint8Array(array,byteOffset,length)}buf.__proto__=Buffer.prototype;return buf}function fromObject(obj){if(Buffer.isBuffer(obj)){var len=checked(obj.length)|0;var buf=createBuffer(len);if(buf.length===0){return buf}obj.copy(buf,0,0,len);return buf}if(obj.length!==undefined){if(typeof obj.length!=="number"||numberIsNaN(obj.length)){return createBuffer(0)}return fromArrayLike(obj)}if(obj.type==="Buffer"&&Array.isArray(obj.data)){return fromArrayLike(obj.data)}}function checked(length){if(length>=K_MAX_LENGTH){throw new RangeError("Attempt to allocate Buffer larger than maximum "+"size: 0x"+K_MAX_LENGTH.toString(16)+" bytes")}return length|0}function SlowBuffer(length){if(+length!=length){length=0}return Buffer.alloc(+length)}Buffer.isBuffer=function isBuffer(b){return b!=null&&b._isBuffer===true&&b!==Buffer.prototype};Buffer.compare=function compare(a,b){if(isInstance(a,Uint8Array))a=Buffer.from(a,a.offset,a.byteLength);if(isInstance(b,Uint8Array))b=Buffer.from(b,b.offset,b.byteLength);if(!Buffer.isBuffer(a)||!Buffer.isBuffer(b)){throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array')}if(a===b)return 0;var x=a.length;var y=b.length;for(var i=0,len=Math.min(x,y);i<len;++i){if(a[i]!==b[i]){x=a[i];y=b[i];break}}if(x<y)return-1;if(y<x)return 1;return 0};Buffer.isEncoding=function isEncoding(encoding){switch(String(encoding).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return true;default:return false}};Buffer.concat=function concat(list,length){if(!Array.isArray(list)){throw new TypeError('"list" argument must be an Array of Buffers')}if(list.length===0){return Buffer.alloc(0)}var i;if(length===undefined){length=0;for(i=0;i<list.length;++i){length+=list[i].length}}var buffer=Buffer.allocUnsafe(length);var pos=0;for(i=0;i<list.length;++i){var buf=list[i];if(isInstance(buf,Uint8Array)){buf=Buffer.from(buf)}if(!Buffer.isBuffer(buf)){throw new TypeError('"list" argument must be an Array of Buffers')}buf.copy(buffer,pos);pos+=buf.length}return buffer};function byteLength(string,encoding){if(Buffer.isBuffer(string)){return string.length}if(ArrayBuffer.isView(string)||isInstance(string,ArrayBuffer)){return string.byteLength}if(typeof string!=="string"){throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. '+"Received type "+typeof string)}var len=string.length;var mustMatch=arguments.length>2&&arguments[2]===true;if(!mustMatch&&len===0)return 0;var loweredCase=false;for(;;){switch(encoding){case"ascii":case"latin1":case"binary":return len;case"utf8":case"utf-8":return utf8ToBytes(string).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return len*2;case"hex":return len>>>1;case"base64":return base64ToBytes(string).length;default:if(loweredCase){return mustMatch?-1:utf8ToBytes(string).length}encoding=(""+encoding).toLowerCase();loweredCase=true}}}Buffer.byteLength=byteLength;function slowToString(encoding,start,end){var loweredCase=false;if(start===undefined||start<0){start=0}if(start>this.length){return""}if(end===undefined||end>this.length){end=this.length}if(end<=0){return""}end>>>=0;start>>>=0;if(end<=start){return""}if(!encoding)encoding="utf8";while(true){switch(encoding){case"hex":return hexSlice(this,start,end);case"utf8":case"utf-8":return utf8Slice(this,start,end);case"ascii":return asciiSlice(this,start,end);case"latin1":case"binary":return latin1Slice(this,start,end);case"base64":return base64Slice(this,start,end);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,start,end);default:if(loweredCase)throw new TypeError("Unknown encoding: "+encoding);encoding=(encoding+"").toLowerCase();loweredCase=true}}}Buffer.prototype._isBuffer=true;function swap(b,n,m){var i=b[n];b[n]=b[m];b[m]=i}Buffer.prototype.swap16=function swap16(){var len=this.length;if(len%2!==0){throw new RangeError("Buffer size must be a multiple of 16-bits")}for(var i=0;i<len;i+=2){swap(this,i,i+1)}return this};Buffer.prototype.swap32=function swap32(){var len=this.length;if(len%4!==0){throw new RangeError("Buffer size must be a multiple of 32-bits")}for(var i=0;i<len;i+=4){swap(this,i,i+3);swap(this,i+1,i+2)}return this};Buffer.prototype.swap64=function swap64(){var len=this.length;if(len%8!==0){throw new RangeError("Buffer size must be a multiple of 64-bits")}for(var i=0;i<len;i+=8){swap(this,i,i+7);swap(this,i+1,i+6);swap(this,i+2,i+5);swap(this,i+3,i+4)}return this};Buffer.prototype.toString=function toString(){var length=this.length;if(length===0)return"";if(arguments.length===0)return utf8Slice(this,0,length);return slowToString.apply(this,arguments)};Buffer.prototype.toLocaleString=Buffer.prototype.toString;Buffer.prototype.equals=function equals(b){if(!Buffer.isBuffer(b))throw new TypeError("Argument must be a Buffer");if(this===b)return true;return Buffer.compare(this,b)===0};Buffer.prototype.inspect=function inspect(){var str="";var max=exports.INSPECT_MAX_BYTES;str=this.toString("hex",0,max).replace(/(.{2})/g,"$1 ").trim();if(this.length>max)str+=" ... ";return"<Buffer "+str+">"};Buffer.prototype.compare=function compare(target,start,end,thisStart,thisEnd){if(isInstance(target,Uint8Array)){target=Buffer.from(target,target.offset,target.byteLength)}if(!Buffer.isBuffer(target)){throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. '+"Received type "+typeof target)}if(start===undefined){start=0}if(end===undefined){end=target?target.length:0}if(thisStart===undefined){thisStart=0}if(thisEnd===undefined){thisEnd=this.length}if(start<0||end>target.length||thisStart<0||thisEnd>this.length){throw new RangeError("out of range index")}if(thisStart>=thisEnd&&start>=end){return 0}if(thisStart>=thisEnd){return-1}if(start>=end){return 1}start>>>=0;end>>>=0;thisStart>>>=0;thisEnd>>>=0;if(this===target)return 0;var x=thisEnd-thisStart;var y=end-start;var len=Math.min(x,y);var thisCopy=this.slice(thisStart,thisEnd);var targetCopy=target.slice(start,end);for(var i=0;i<len;++i){if(thisCopy[i]!==targetCopy[i]){x=thisCopy[i];y=targetCopy[i];break}}if(x<y)return-1;if(y<x)return 1;return 0};function bidirectionalIndexOf(buffer,val,byteOffset,encoding,dir){if(buffer.length===0)return-1;if(typeof byteOffset==="string"){encoding=byteOffset;byteOffset=0}else if(byteOffset>2147483647){byteOffset=2147483647}else if(byteOffset<-2147483648){byteOffset=-2147483648}byteOffset=+byteOffset;if(numberIsNaN(byteOffset)){byteOffset=dir?0:buffer.length-1}if(byteOffset<0)byteOffset=buffer.length+byteOffset;if(byteOffset>=buffer.length){if(dir)return-1;else byteOffset=buffer.length-1}else if(byteOffset<0){if(dir)byteOffset=0;else return-1}if(typeof val==="string"){val=Buffer.from(val,encoding)}if(Buffer.isBuffer(val)){if(val.length===0){return-1}return arrayIndexOf(buffer,val,byteOffset,encoding,dir)}else if(typeof val==="number"){val=val&255;if(typeof Uint8Array.prototype.indexOf==="function"){if(dir){return Uint8Array.prototype.indexOf.call(buffer,val,byteOffset)}else{return Uint8Array.prototype.lastIndexOf.call(buffer,val,byteOffset)}}return arrayIndexOf(buffer,[val],byteOffset,encoding,dir)}throw new TypeError("val must be string, number or Buffer")}function arrayIndexOf(arr,val,byteOffset,encoding,dir){var indexSize=1;var arrLength=arr.length;var valLength=val.length;if(encoding!==undefined){encoding=String(encoding).toLowerCase();if(encoding==="ucs2"||encoding==="ucs-2"||encoding==="utf16le"||encoding==="utf-16le"){if(arr.length<2||val.length<2){return-1}indexSize=2;arrLength/=2;valLength/=2;byteOffset/=2}}function read(buf,i){if(indexSize===1){return buf[i]}else{return buf.readUInt16BE(i*indexSize)}}var i;if(dir){var foundIndex=-1;for(i=byteOffset;i<arrLength;i++){if(read(arr,i)===read(val,foundIndex===-1?0:i-foundIndex)){if(foundIndex===-1)foundIndex=i;if(i-foundIndex+1===valLength)return foundIndex*indexSize}else{if(foundIndex!==-1)i-=i-foundIndex;foundIndex=-1}}}else{if(byteOffset+valLength>arrLength)byteOffset=arrLength-valLength;for(i=byteOffset;i>=0;i--){var found=true;for(var j=0;j<valLength;j++){if(read(arr,i+j)!==read(val,j)){found=false;break}}if(found)return i}}return-1}Buffer.prototype.includes=function includes(val,byteOffset,encoding){return this.indexOf(val,byteOffset,encoding)!==-1};Buffer.prototype.indexOf=function indexOf(val,byteOffset,encoding){return bidirectionalIndexOf(this,val,byteOffset,encoding,true)};Buffer.prototype.lastIndexOf=function lastIndexOf(val,byteOffset,encoding){return bidirectionalIndexOf(this,val,byteOffset,encoding,false)};function hexWrite(buf,string,offset,length){offset=Number(offset)||0;var remaining=buf.length-offset;if(!length){length=remaining}else{length=Number(length);if(length>remaining){length=remaining}}var strLen=string.length;if(length>strLen/2){length=strLen/2}for(var i=0;i<length;++i){var parsed=parseInt(string.substr(i*2,2),16);if(numberIsNaN(parsed))return i;buf[offset+i]=parsed}return i}function utf8Write(buf,string,offset,length){return blitBuffer(utf8ToBytes(string,buf.length-offset),buf,offset,length)}function asciiWrite(buf,string,offset,length){return blitBuffer(asciiToBytes(string),buf,offset,length)}function latin1Write(buf,string,offset,length){return asciiWrite(buf,string,offset,length)}function base64Write(buf,string,offset,length){return blitBuffer(base64ToBytes(string),buf,offset,length)}function ucs2Write(buf,string,offset,length){return blitBuffer(utf16leToBytes(string,buf.length-offset),buf,offset,length)}Buffer.prototype.write=function write(string,offset,length,encoding){if(offset===undefined){encoding="utf8";length=this.length;offset=0}else if(length===undefined&&typeof offset==="string"){encoding=offset;length=this.length;offset=0}else if(isFinite(offset)){offset=offset>>>0;if(isFinite(length)){length=length>>>0;if(encoding===undefined)encoding="utf8"}else{encoding=length;length=undefined}}else{throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported")}var remaining=this.length-offset;if(length===undefined||length>remaining)length=remaining;if(string.length>0&&(length<0||offset<0)||offset>this.length){throw new RangeError("Attempt to write outside buffer bounds")}if(!encoding)encoding="utf8";var loweredCase=false;for(;;){switch(encoding){case"hex":return hexWrite(this,string,offset,length);case"utf8":case"utf-8":return utf8Write(this,string,offset,length);case"ascii":return asciiWrite(this,string,offset,length);case"latin1":case"binary":return latin1Write(this,string,offset,length);case"base64":return base64Write(this,string,offset,length);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,string,offset,length);default:if(loweredCase)throw new TypeError("Unknown encoding: "+encoding);encoding=(""+encoding).toLowerCase();loweredCase=true}}};Buffer.prototype.toJSON=function toJSON(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function base64Slice(buf,start,end){if(start===0&&end===buf.length){return base64.fromByteArray(buf)}else{return base64.fromByteArray(buf.slice(start,end))}}function utf8Slice(buf,start,end){end=Math.min(buf.length,end);var res=[];var i=start;while(i<end){var firstByte=buf[i];var codePoint=null;var bytesPerSequence=firstByte>239?4:firstByte>223?3:firstByte>191?2:1;if(i+bytesPerSequence<=end){var secondByte,thirdByte,fourthByte,tempCodePoint;switch(bytesPerSequence){case 1:if(firstByte<128){codePoint=firstByte}break;case 2:secondByte=buf[i+1];if((secondByte&192)===128){tempCodePoint=(firstByte&31)<<6|secondByte&63;if(tempCodePoint>127){codePoint=tempCodePoint}}break;case 3:secondByte=buf[i+1];thirdByte=buf[i+2];if((secondByte&192)===128&&(thirdByte&192)===128){tempCodePoint=(firstByte&15)<<12|(secondByte&63)<<6|thirdByte&63;if(tempCodePoint>2047&&(tempCodePoint<55296||tempCodePoint>57343)){codePoint=tempCodePoint}}break;case 4:secondByte=buf[i+1];thirdByte=buf[i+2];fourthByte=buf[i+3];if((secondByte&192)===128&&(thirdByte&192)===128&&(fourthByte&192)===128){tempCodePoint=(firstByte&15)<<18|(secondByte&63)<<12|(thirdByte&63)<<6|fourthByte&63;if(tempCodePoint>65535&&tempCodePoint<1114112){codePoint=tempCodePoint}}}}if(codePoint===null){codePoint=65533;bytesPerSequence=1}else if(codePoint>65535){codePoint-=65536;res.push(codePoint>>>10&1023|55296);codePoint=56320|codePoint&1023}res.push(codePoint);i+=bytesPerSequence}return decodeCodePointsArray(res)}var MAX_ARGUMENTS_LENGTH=4096;function decodeCodePointsArray(codePoints){var len=codePoints.length;if(len<=MAX_ARGUMENTS_LENGTH){return String.fromCharCode.apply(String,codePoints)}var res="";var i=0;while(i<len){res+=String.fromCharCode.apply(String,codePoints.slice(i,i+=MAX_ARGUMENTS_LENGTH))}return res}function asciiSlice(buf,start,end){var ret="";end=Math.min(buf.length,end);for(var i=start;i<end;++i){ret+=String.fromCharCode(buf[i]&127)}return ret}function latin1Slice(buf,start,end){var ret="";end=Math.min(buf.length,end);for(var i=start;i<end;++i){ret+=String.fromCharCode(buf[i])}return ret}function hexSlice(buf,start,end){var len=buf.length;if(!start||start<0)start=0;if(!end||end<0||end>len)end=len;var out="";for(var i=start;i<end;++i){out+=toHex(buf[i])}return out}function utf16leSlice(buf,start,end){var bytes=buf.slice(start,end);var res="";for(var i=0;i<bytes.length;i+=2){res+=String.fromCharCode(bytes[i]+bytes[i+1]*256)}return res}Buffer.prototype.slice=function slice(start,end){var len=this.length;start=~~start;end=end===undefined?len:~~end;if(start<0){start+=len;if(start<0)start=0}else if(start>len){start=len}if(end<0){end+=len;if(end<0)end=0}else if(end>len){end=len}if(end<start)end=start;var newBuf=this.subarray(start,end);newBuf.__proto__=Buffer.prototype;return newBuf};function checkOffset(offset,ext,length){if(offset%1!==0||offset<0)throw new RangeError("offset is not uint");if(offset+ext>length)throw new RangeError("Trying to access beyond buffer length")}Buffer.prototype.readUIntLE=function readUIntLE(offset,byteLength,noAssert){offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert)checkOffset(offset,byteLength,this.length);var val=this[offset];var mul=1;var i=0;while(++i<byteLength&&(mul*=256)){val+=this[offset+i]*mul}return val};Buffer.prototype.readUIntBE=function readUIntBE(offset,byteLength,noAssert){offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert){checkOffset(offset,byteLength,this.length)}var val=this[offset+--byteLength];var mul=1;while(byteLength>0&&(mul*=256)){val+=this[offset+--byteLength]*mul}return val};Buffer.prototype.readUInt8=function readUInt8(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,1,this.length);return this[offset]};Buffer.prototype.readUInt16LE=function readUInt16LE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,2,this.length);return this[offset]|this[offset+1]<<8};Buffer.prototype.readUInt16BE=function readUInt16BE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,2,this.length);return this[offset]<<8|this[offset+1]};Buffer.prototype.readUInt32LE=function readUInt32LE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return(this[offset]|this[offset+1]<<8|this[offset+2]<<16)+this[offset+3]*16777216};Buffer.prototype.readUInt32BE=function readUInt32BE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return this[offset]*16777216+(this[offset+1]<<16|this[offset+2]<<8|this[offset+3])};Buffer.prototype.readIntLE=function readIntLE(offset,byteLength,noAssert){offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert)checkOffset(offset,byteLength,this.length);var val=this[offset];var mul=1;var i=0;while(++i<byteLength&&(mul*=256)){val+=this[offset+i]*mul}mul*=128;if(val>=mul)val-=Math.pow(2,8*byteLength);return val};Buffer.prototype.readIntBE=function readIntBE(offset,byteLength,noAssert){offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert)checkOffset(offset,byteLength,this.length);var i=byteLength;var mul=1;var val=this[offset+--i];while(i>0&&(mul*=256)){val+=this[offset+--i]*mul}mul*=128;if(val>=mul)val-=Math.pow(2,8*byteLength);return val};Buffer.prototype.readInt8=function readInt8(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,1,this.length);if(!(this[offset]&128))return this[offset];return(255-this[offset]+1)*-1};Buffer.prototype.readInt16LE=function readInt16LE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset]|this[offset+1]<<8;return val&32768?val|4294901760:val};Buffer.prototype.readInt16BE=function readInt16BE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset+1]|this[offset]<<8;return val&32768?val|4294901760:val};Buffer.prototype.readInt32LE=function readInt32LE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return this[offset]|this[offset+1]<<8|this[offset+2]<<16|this[offset+3]<<24};Buffer.prototype.readInt32BE=function readInt32BE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return this[offset]<<24|this[offset+1]<<16|this[offset+2]<<8|this[offset+3]};Buffer.prototype.readFloatLE=function readFloatLE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,true,23,4)};Buffer.prototype.readFloatBE=function readFloatBE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,false,23,4)};Buffer.prototype.readDoubleLE=function readDoubleLE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,true,52,8)};Buffer.prototype.readDoubleBE=function readDoubleBE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,false,52,8)};function checkInt(buf,value,offset,ext,max,min){if(!Buffer.isBuffer(buf))throw new TypeError('"buffer" argument must be a Buffer instance');if(value>max||value<min)throw new RangeError('"value" argument is out of bounds');if(offset+ext>buf.length)throw new RangeError("Index out of range")}Buffer.prototype.writeUIntLE=function writeUIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert){var maxBytes=Math.pow(2,8*byteLength)-1;checkInt(this,value,offset,byteLength,maxBytes,0)}var mul=1;var i=0;this[offset]=value&255;while(++i<byteLength&&(mul*=256)){this[offset+i]=value/mul&255}return offset+byteLength};Buffer.prototype.writeUIntBE=function writeUIntBE(value,offset,byteLength,noAssert){value=+value;offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert){var maxBytes=Math.pow(2,8*byteLength)-1;checkInt(this,value,offset,byteLength,maxBytes,0)}var i=byteLength-1;var mul=1;this[offset+i]=value&255;while(--i>=0&&(mul*=256)){this[offset+i]=value/mul&255}return offset+byteLength};Buffer.prototype.writeUInt8=function writeUInt8(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,1,255,0);this[offset]=value&255;return offset+1};Buffer.prototype.writeUInt16LE=function writeUInt16LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,65535,0);this[offset]=value&255;this[offset+1]=value>>>8;return offset+2};Buffer.prototype.writeUInt16BE=function writeUInt16BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,65535,0);this[offset]=value>>>8;this[offset+1]=value&255;return offset+2};Buffer.prototype.writeUInt32LE=function writeUInt32LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,4294967295,0);this[offset+3]=value>>>24;this[offset+2]=value>>>16;this[offset+1]=value>>>8;this[offset]=value&255;return offset+4};Buffer.prototype.writeUInt32BE=function writeUInt32BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,4294967295,0);this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value&255;return offset+4};Buffer.prototype.writeIntLE=function writeIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset>>>0;if(!noAssert){var limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit)}var i=0;var mul=1;var sub=0;this[offset]=value&255;while(++i<byteLength&&(mul*=256)){if(value<0&&sub===0&&this[offset+i-1]!==0){sub=1}this[offset+i]=(value/mul>>0)-sub&255}return offset+byteLength};Buffer.prototype.writeIntBE=function writeIntBE(value,offset,byteLength,noAssert){value=+value;offset=offset>>>0;if(!noAssert){var limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit)}var i=byteLength-1;var mul=1;var sub=0;this[offset+i]=value&255;while(--i>=0&&(mul*=256)){if(value<0&&sub===0&&this[offset+i+1]!==0){sub=1}this[offset+i]=(value/mul>>0)-sub&255}return offset+byteLength};Buffer.prototype.writeInt8=function writeInt8(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,1,127,-128);if(value<0)value=255+value+1;this[offset]=value&255;return offset+1};Buffer.prototype.writeInt16LE=function writeInt16LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,32767,-32768);this[offset]=value&255;this[offset+1]=value>>>8;return offset+2};Buffer.prototype.writeInt16BE=function writeInt16BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,32767,-32768);this[offset]=value>>>8;this[offset+1]=value&255;return offset+2};Buffer.prototype.writeInt32LE=function writeInt32LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,2147483647,-2147483648);this[offset]=value&255;this[offset+1]=value>>>8;this[offset+2]=value>>>16;this[offset+3]=value>>>24;return offset+4};Buffer.prototype.writeInt32BE=function writeInt32BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,2147483647,-2147483648);if(value<0)value=4294967295+value+1;this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value&255;return offset+4};function checkIEEE754(buf,value,offset,ext,max,min){if(offset+ext>buf.length)throw new RangeError("Index out of range");if(offset<0)throw new RangeError("Index out of range")}function writeFloat(buf,value,offset,littleEndian,noAssert){value=+value;offset=offset>>>0;if(!noAssert){checkIEEE754(buf,value,offset,4,34028234663852886e22,-34028234663852886e22)}ieee754.write(buf,value,offset,littleEndian,23,4);return offset+4}Buffer.prototype.writeFloatLE=function writeFloatLE(value,offset,noAssert){return writeFloat(this,value,offset,true,noAssert)};Buffer.prototype.writeFloatBE=function writeFloatBE(value,offset,noAssert){return writeFloat(this,value,offset,false,noAssert)};function writeDouble(buf,value,offset,littleEndian,noAssert){value=+value;offset=offset>>>0;if(!noAssert){checkIEEE754(buf,value,offset,8,17976931348623157e292,-17976931348623157e292)}ieee754.write(buf,value,offset,littleEndian,52,8);return offset+8}Buffer.prototype.writeDoubleLE=function writeDoubleLE(value,offset,noAssert){return writeDouble(this,value,offset,true,noAssert)};Buffer.prototype.writeDoubleBE=function writeDoubleBE(value,offset,noAssert){return writeDouble(this,value,offset,false,noAssert)};Buffer.prototype.copy=function copy(target,targetStart,start,end){if(!Buffer.isBuffer(target))throw new TypeError("argument should be a Buffer");if(!start)start=0;if(!end&&end!==0)end=this.length;if(targetStart>=target.length)targetStart=target.length;if(!targetStart)targetStart=0;if(end>0&&end<start)end=start;if(end===start)return 0;if(target.length===0||this.length===0)return 0;if(targetStart<0){throw new RangeError("targetStart out of bounds")}if(start<0||start>=this.length)throw new RangeError("Index out of range");if(end<0)throw new RangeError("sourceEnd out of bounds");if(end>this.length)end=this.length;if(target.length-targetStart<end-start){end=target.length-targetStart+start}var len=end-start;if(this===target&&typeof Uint8Array.prototype.copyWithin==="function"){this.copyWithin(targetStart,start,end)}else if(this===target&&start<targetStart&&targetStart<end){for(var i=len-1;i>=0;--i){target[i+targetStart]=this[i+start]}}else{Uint8Array.prototype.set.call(target,this.subarray(start,end),targetStart)}return len};Buffer.prototype.fill=function fill(val,start,end,encoding){if(typeof val==="string"){if(typeof start==="string"){encoding=start;start=0;end=this.length}else if(typeof end==="string"){encoding=end;end=this.length}if(encoding!==undefined&&typeof encoding!=="string"){throw new TypeError("encoding must be a string")}if(typeof encoding==="string"&&!Buffer.isEncoding(encoding)){throw new TypeError("Unknown encoding: "+encoding)}if(val.length===1){var code=val.charCodeAt(0);if(encoding==="utf8"&&code<128||encoding==="latin1"){val=code}}}else if(typeof val==="number"){val=val&255}if(start<0||this.length<start||this.length<end){throw new RangeError("Out of range index")}if(end<=start){return this}start=start>>>0;end=end===undefined?this.length:end>>>0;if(!val)val=0;var i;if(typeof val==="number"){for(i=start;i<end;++i){this[i]=val}}else{var bytes=Buffer.isBuffer(val)?val:Buffer.from(val,encoding);var len=bytes.length;if(len===0){throw new TypeError('The value "'+val+'" is invalid for argument "value"')}for(i=0;i<end-start;++i){this[i+start]=bytes[i%len]}}return this};var INVALID_BASE64_RE=/[^+/0-9A-Za-z-_]/g;function base64clean(str){str=str.split("=")[0];str=str.trim().replace(INVALID_BASE64_RE,"");if(str.length<2)return"";while(str.length%4!==0){str=str+"="}return str}function toHex(n){if(n<16)return"0"+n.toString(16);return n.toString(16)}function utf8ToBytes(string,units){units=units||Infinity;var codePoint;var length=string.length;var leadSurrogate=null;var bytes=[];for(var i=0;i<length;++i){codePoint=string.charCodeAt(i);if(codePoint>55295&&codePoint<57344){if(!leadSurrogate){if(codePoint>56319){if((units-=3)>-1)bytes.push(239,191,189);continue}else if(i+1===length){if((units-=3)>-1)bytes.push(239,191,189);continue}leadSurrogate=codePoint;continue}if(codePoint<56320){if((units-=3)>-1)bytes.push(239,191,189);leadSurrogate=codePoint;continue}codePoint=(leadSurrogate-55296<<10|codePoint-56320)+65536}else if(leadSurrogate){if((units-=3)>-1)bytes.push(239,191,189)}leadSurrogate=null;if(codePoint<128){if((units-=1)<0)break;bytes.push(codePoint)}else if(codePoint<2048){if((units-=2)<0)break;bytes.push(codePoint>>6|192,codePoint&63|128)}else if(codePoint<65536){if((units-=3)<0)break;bytes.push(codePoint>>12|224,codePoint>>6&63|128,codePoint&63|128)}else if(codePoint<1114112){if((units-=4)<0)break;bytes.push(codePoint>>18|240,codePoint>>12&63|128,codePoint>>6&63|128,codePoint&63|128)}else{throw new Error("Invalid code point")}}return bytes}function asciiToBytes(str){var byteArray=[];for(var i=0;i<str.length;++i){byteArray.push(str.charCodeAt(i)&255)}return byteArray}function utf16leToBytes(str,units){var c,hi,lo;var byteArray=[];for(var i=0;i<str.length;++i){if((units-=2)<0)break;c=str.charCodeAt(i);hi=c>>8;lo=c%256;byteArray.push(lo);byteArray.push(hi)}return byteArray}function base64ToBytes(str){return base64.toByteArray(base64clean(str))}function blitBuffer(src,dst,offset,length){for(var i=0;i<length;++i){if(i+offset>=dst.length||i>=src.length)break;dst[i+offset]=src[i]}return i}function isInstance(obj,type){return obj instanceof type||obj!=null&&obj.constructor!=null&&obj.constructor.name!=null&&obj.constructor.name===type.name}function numberIsNaN(obj){return obj!==obj}}).call(this)}).call(this,require("buffer").Buffer)},{"base64-js":36,buffer:38,ieee754:39}],39:[function(require,module,exports){exports.read=function(buffer,offset,isLE,mLen,nBytes){var e,m;var eLen=nBytes*8-mLen-1;var eMax=(1<<eLen)-1;var eBias=eMax>>1;var nBits=-7;var i=isLE?nBytes-1:0;var d=isLE?-1:1;var s=buffer[offset+i];i+=d;e=s&(1<<-nBits)-1;s>>=-nBits;nBits+=eLen;for(;nBits>0;e=e*256+buffer[offset+i],i+=d,nBits-=8){}m=e&(1<<-nBits)-1;e>>=-nBits;nBits+=mLen;for(;nBits>0;m=m*256+buffer[offset+i],i+=d,nBits-=8){}if(e===0){e=1-eBias}else if(e===eMax){return m?NaN:(s?-1:1)*Infinity}else{m=m+Math.pow(2,mLen);e=e-eBias}return(s?-1:1)*m*Math.pow(2,e-mLen)};exports.write=function(buffer,value,offset,isLE,mLen,nBytes){var e,m,c;var eLen=nBytes*8-mLen-1;var eMax=(1<<eLen)-1;var eBias=eMax>>1;var rt=mLen===23?Math.pow(2,-24)-Math.pow(2,-77):0;var i=isLE?0:nBytes-1;var d=isLE?1:-1;var s=value<0||value===0&&1/value<0?1:0;value=Math.abs(value);if(isNaN(value)||value===Infinity){m=isNaN(value)?1:0;e=eMax}else{e=Math.floor(Math.log(value)/Math.LN2);if(value*(c=Math.pow(2,-e))<1){e--;c*=2}if(e+eBias>=1){value+=rt/c}else{value+=rt*Math.pow(2,1-eBias)}if(value*c>=2){e++;c/=2}if(e+eBias>=eMax){m=0;e=eMax}else if(e+eBias>=1){m=(value*c-1)*Math.pow(2,mLen);e=e+eBias}else{m=value*Math.pow(2,eBias-1)*Math.pow(2,mLen);e=0}}for(;mLen>=8;buffer[offset+i]=m&255,i+=d,m/=256,mLen-=8){}e=e<<mLen|m;eLen+=mLen;for(;eLen>0;buffer[offset+i]=e&255,i+=d,e/=256,eLen-=8){}buffer[offset+i-d]|=s*128}},{}],40:[function(require,module,exports){var process=module.exports={};var cachedSetTimeout;var cachedClearTimeout;function defaultSetTimout(){throw new Error("setTimeout has not been defined")}function defaultClearTimeout(){throw new Error("clearTimeout has not been defined")}(function(){try{if(typeof setTimeout==="function"){cachedSetTimeout=setTimeout}else{cachedSetTimeout=defaultSetTimout}}catch(e){cachedSetTimeout=defaultSetTimout}try{if(typeof clearTimeout==="function"){cachedClearTimeout=clearTimeout}else{cachedClearTimeout=defaultClearTimeout}}catch(e){cachedClearTimeout=defaultClearTimeout}})();function runTimeout(fun){if(cachedSetTimeout===setTimeout){return setTimeout(fun,0)}if((cachedSetTimeout===defaultSetTimout||!cachedSetTimeout)&&setTimeout){cachedSetTimeout=setTimeout;return setTimeout(fun,0)}try{return cachedSetTimeout(fun,0)}catch(e){try{return cachedSetTimeout.call(null,fun,0)}catch(e){return cachedSetTimeout.call(this,fun,0)}}}function runClearTimeout(marker){if(cachedClearTimeout===clearTimeout){return clearTimeout(marker)}if((cachedClearTimeout===defaultClearTimeout||!cachedClearTimeout)&&clearTimeout){cachedClearTimeout=clearTimeout;return clearTimeout(marker)}try{return cachedClearTimeout(marker)}catch(e){try{return cachedClearTimeout.call(null,marker)}catch(e){return cachedClearTimeout.call(this,marker)}}}var queue=[];var draining=false;var currentQueue;var queueIndex=-1;function cleanUpNextTick(){if(!draining||!currentQueue){return}draining=false;if(currentQueue.length){queue=currentQueue.concat(queue)}else{queueIndex=-1}if(queue.length){drainQueue()}}function drainQueue(){if(draining){return}var timeout=runTimeout(cleanUpNextTick);draining=true;var len=queue.length;while(len){currentQueue=queue;queue=[];while(++queueIndex<len){if(currentQueue){currentQueue[queueIndex].run()}}queueIndex=-1;len=queue.length}currentQueue=null;draining=false;runClearTimeout(timeout)}process.nextTick=function(fun){var args=new Array(arguments.length-1);if(arguments.length>1){for(var i=1;i<arguments.length;i++){args[i-1]=arguments[i]}}queue.push(new Item(fun,args));if(queue.length===1&&!draining){runTimeout(drainQueue)}};function Item(fun,array){this.fun=fun;this.array=array}Item.prototype.run=function(){this.fun.apply(null,this.array)};process.title="browser";process.browser=true;process.env={};process.argv=[];process.version="";process.versions={};function noop(){}process.on=noop;process.addListener=noop;process.once=noop;process.off=noop;process.removeListener=noop;process.removeAllListeners=noop;process.emit=noop;process.prependListener=noop;process.prependOnceListener=noop;process.listeners=function(name){return[]};process.binding=function(name){throw new Error("process.binding is not supported")};process.cwd=function(){return"/"};process.chdir=function(dir){throw new Error("process.chdir is not supported")};process.umask=function(){return 0}},{}],41:[function(require,module,exports){var alea=require("./lib/alea");var xor128=require("./lib/xor128");var xorwow=require("./lib/xorwow");var xorshift7=require("./lib/xorshift7");var xor4096=require("./lib/xor4096");var tychei=require("./lib/tychei");var sr=require("./seedrandom");sr.alea=alea;sr.xor128=xor128;sr.xorwow=xorwow;sr.xorshift7=xorshift7;sr.xor4096=xor4096;sr.tychei=tychei;module.exports=sr},{"./lib/alea":42,"./lib/tychei":43,"./lib/xor128":44,"./lib/xor4096":45,"./lib/xorshift7":46,"./lib/xorwow":47,"./seedrandom":48}],42:[function(require,module,exports){(function(global,module,define){function Alea(seed){var me=this,mash=Mash();me.next=function(){var t=2091639*me.s0+me.c*2.3283064365386963e-10;me.s0=me.s1;me.s1=me.s2;return me.s2=t-(me.c=t|0)};me.c=1;me.s0=mash(" ");me.s1=mash(" ");me.s2=mash(" ");me.s0-=mash(seed);if(me.s0<0){me.s0+=1}me.s1-=mash(seed);if(me.s1<0){me.s1+=1}me.s2-=mash(seed);if(me.s2<0){me.s2+=1}mash=null}function copy(f,t){t.c=f.c;t.s0=f.s0;t.s1=f.s1;t.s2=f.s2;return t}function impl(seed,opts){var xg=new Alea(seed),state=opts&&opts.state,prng=xg.next;prng.int32=function(){return xg.next()*4294967296|0};prng.double=function(){return prng()+(prng()*2097152|0)*11102230246251565e-32};prng.quick=prng;if(state){if(typeof state=="object")copy(state,xg);prng.state=function(){return copy(xg,{})}}return prng}function Mash(){var n=4022871197;var mash=function(data){data=data.toString();for(var i=0;i<data.length;i++){n+=data.charCodeAt(i);var h=.02519603282416938*n;n=h>>>0;h-=n;h*=n;n=h>>>0;h-=n;n+=h*4294967296}return(n>>>0)*2.3283064365386963e-10};return mash}if(module&&module.exports){module.exports=impl}else if(define&&define.amd){define(function(){return impl})}else{this.alea=impl}})(this,typeof module=="object"&&module,typeof define=="function"&&define)},{}],43:[function(require,module,exports){(function(global,module,define){function XorGen(seed){var me=this,strseed="";me.next=function(){var b=me.b,c=me.c,d=me.d,a=me.a;b=b<<25^b>>>7^c;c=c-d|0;d=d<<24^d>>>8^a;a=a-b|0;me.b=b=b<<20^b>>>12^c;me.c=c=c-d|0;me.d=d<<16^c>>>16^a;return me.a=a-b|0};me.a=0;me.b=0;me.c=2654435769|0;me.d=1367130551;if(seed===Math.floor(seed)){me.a=seed/4294967296|0;me.b=seed|0}else{strseed+=seed}for(var k=0;k<strseed.length+20;k++){me.b^=strseed.charCodeAt(k)|0;me.next()}}function copy(f,t){t.a=f.a;t.b=f.b;t.c=f.c;t.d=f.d;return t}function impl(seed,opts){var xg=new XorGen(seed),state=opts&&opts.state,prng=function(){return(xg.next()>>>0)/4294967296};prng.double=function(){do{var top=xg.next()>>>11,bot=(xg.next()>>>0)/4294967296,result=(top+bot)/(1<<21)}while(result===0);return result};prng.int32=xg.next;prng.quick=prng;if(state){if(typeof state=="object")copy(state,xg);prng.state=function(){return copy(xg,{})}}return prng}if(module&&module.exports){module.exports=impl}else if(define&&define.amd){define(function(){return impl})}else{this.tychei=impl}})(this,typeof module=="object"&&module,typeof define=="function"&&define)},{}],44:[function(require,module,exports){(function(global,module,define){function XorGen(seed){var me=this,strseed="";me.x=0;me.y=0;me.z=0;me.w=0;me.next=function(){var t=me.x^me.x<<11;me.x=me.y;me.y=me.z;me.z=me.w;return me.w^=me.w>>>19^t^t>>>8};if(seed===(seed|0)){me.x=seed}else{strseed+=seed}for(var k=0;k<strseed.length+64;k++){me.x^=strseed.charCodeAt(k)|0;me.next()}}function copy(f,t){t.x=f.x;t.y=f.y;t.z=f.z;t.w=f.w;return t}function impl(seed,opts){var xg=new XorGen(seed),state=opts&&opts.state,prng=function(){return(xg.next()>>>0)/4294967296};prng.double=function(){do{var top=xg.next()>>>11,bot=(xg.next()>>>0)/4294967296,result=(top+bot)/(1<<21)}while(result===0);return result};prng.int32=xg.next;prng.quick=prng;if(state){if(typeof state=="object")copy(state,xg);prng.state=function(){return copy(xg,{})}}return prng}if(module&&module.exports){module.exports=impl}else if(define&&define.amd){define(function(){return impl})}else{this.xor128=impl}})(this,typeof module=="object"&&module,typeof define=="function"&&define)},{}],45:[function(require,module,exports){(function(global,module,define){function XorGen(seed){var me=this;me.next=function(){var w=me.w,X=me.X,i=me.i,t,v;me.w=w=w+1640531527|0;v=X[i+34&127];t=X[i=i+1&127];v^=v<<13;t^=t<<17;v^=v>>>15;t^=t>>>12;v=X[i]=v^t;me.i=i;return v+(w^w>>>16)|0};function init(me,seed){var t,v,i,j,w,X=[],limit=128;if(seed===(seed|0)){v=seed;seed=null}else{seed=seed+"\0";v=0;limit=Math.max(limit,seed.length)}for(i=0,j=-32;j<limit;++j){if(seed)v^=seed.charCodeAt((j+32)%seed.length);if(j===0)w=v;v^=v<<10;v^=v>>>15;v^=v<<4;v^=v>>>13;if(j>=0){w=w+1640531527|0;t=X[j&127]^=v+w;i=0==t?i+1:0}}if(i>=128){X[(seed&&seed.length||0)&127]=-1}i=127;for(j=4*128;j>0;--j){v=X[i+34&127];t=X[i=i+1&127];v^=v<<13;t^=t<<17;v^=v>>>15;t^=t>>>12;X[i]=v^t}me.w=w;me.X=X;me.i=i}init(me,seed)}function copy(f,t){t.i=f.i;t.w=f.w;t.X=f.X.slice();return t}function impl(seed,opts){if(seed==null)seed=+new Date;var xg=new XorGen(seed),state=opts&&opts.state,prng=function(){return(xg.next()>>>0)/4294967296};prng.double=function(){do{var top=xg.next()>>>11,bot=(xg.next()>>>0)/4294967296,result=(top+bot)/(1<<21)}while(result===0);return result};prng.int32=xg.next;prng.quick=prng;if(state){if(state.X)copy(state,xg);prng.state=function(){return copy(xg,{})}}return prng}if(module&&module.exports){module.exports=impl}else if(define&&define.amd){define(function(){return impl})}else{this.xor4096=impl}})(this,typeof module=="object"&&module,typeof define=="function"&&define)},{}],46:[function(require,module,exports){(function(global,module,define){function XorGen(seed){var me=this;me.next=function(){var X=me.x,i=me.i,t,v,w;t=X[i];t^=t>>>7;v=t^t<<24;t=X[i+1&7];v^=t^t>>>10;t=X[i+3&7];v^=t^t>>>3;t=X[i+4&7];v^=t^t<<7;t=X[i+7&7];t=t^t<<13;v^=t^t<<9;X[i]=v;me.i=i+1&7;return v};function init(me,seed){var j,w,X=[];if(seed===(seed|0)){w=X[0]=seed}else{seed=""+seed;for(j=0;j<seed.length;++j){X[j&7]=X[j&7]<<15^seed.charCodeAt(j)+X[j+1&7]<<13}}while(X.length<8)X.push(0);for(j=0;j<8&&X[j]===0;++j);if(j==8)w=X[7]=-1;else w=X[j];me.x=X;me.i=0;for(j=256;j>0;--j){me.next()}}init(me,seed)}function copy(f,t){t.x=f.x.slice();t.i=f.i;return t}function impl(seed,opts){if(seed==null)seed=+new Date;var xg=new XorGen(seed),state=opts&&opts.state,prng=function(){return(xg.next()>>>0)/4294967296};prng.double=function(){do{var top=xg.next()>>>11,bot=(xg.next()>>>0)/4294967296,result=(top+bot)/(1<<21)}while(result===0);return result};prng.int32=xg.next;prng.quick=prng;if(state){if(state.x)copy(state,xg);prng.state=function(){return copy(xg,{})}}return prng}if(module&&module.exports){module.exports=impl}else if(define&&define.amd){define(function(){return impl})}else{this.xorshift7=impl}})(this,typeof module=="object"&&module,typeof define=="function"&&define)},{}],47:[function(require,module,exports){(function(global,module,define){function XorGen(seed){var me=this,strseed="";me.next=function(){var t=me.x^me.x>>>2;me.x=me.y;me.y=me.z;me.z=me.w;me.w=me.v;return(me.d=me.d+362437|0)+(me.v=me.v^me.v<<4^(t^t<<1))|0};me.x=0;me.y=0;me.z=0;me.w=0;me.v=0;if(seed===(seed|0)){me.x=seed}else{strseed+=seed}for(var k=0;k<strseed.length+64;k++){me.x^=strseed.charCodeAt(k)|0;if(k==strseed.length){me.d=me.x<<10^me.x>>>4}me.next()}}function copy(f,t){t.x=f.x;t.y=f.y;t.z=f.z;t.w=f.w;t.v=f.v;t.d=f.d;return t}function impl(seed,opts){var xg=new XorGen(seed),state=opts&&opts.state,prng=function(){return(xg.next()>>>0)/4294967296};prng.double=function(){do{var top=xg.next()>>>11,bot=(xg.next()>>>0)/4294967296,result=(top+bot)/(1<<21)}while(result===0);return result};prng.int32=xg.next;prng.quick=prng;if(state){if(typeof state=="object")copy(state,xg);prng.state=function(){return copy(xg,{})}}return prng}if(module&&module.exports){module.exports=impl}else if(define&&define.amd){define(function(){return impl})}else{this.xorwow=impl}})(this,typeof module=="object"&&module,typeof define=="function"&&define)},{}],48:[function(require,module,exports){(function(pool,math){var global=this,width=256,chunks=6,digits=52,rngname="random",startdenom=math.pow(width,chunks),significance=math.pow(2,digits),overflow=significance*2,mask=width-1,nodecrypto;function seedrandom(seed,options,callback){var key=[];options=options==true?{entropy:true}:options||{};var shortseed=mixkey(flatten(options.entropy?[seed,tostring(pool)]:seed==null?autoseed():seed,3),key);var arc4=new ARC4(key);var prng=function(){var n=arc4.g(chunks),d=startdenom,x=0;while(n<significance){n=(n+x)*width;d*=width;x=arc4.g(1)}while(n>=overflow){n/=2;d/=2;x>>>=1}return(n+x)/d};prng.int32=function(){return arc4.g(4)|0};prng.quick=function(){return arc4.g(4)/4294967296};prng.double=prng;mixkey(tostring(arc4.S),pool);return(options.pass||callback||function(prng,seed,is_math_call,state){if(state){if(state.S){copy(state,arc4)}prng.state=function(){return copy(arc4,{})}}if(is_math_call){math[rngname]=prng;return seed}else return prng})(prng,shortseed,"global"in options?options.global:this==math,options.state)}math["seed"+rngname]=seedrandom;function ARC4(key){var t,keylen=key.length,me=this,i=0,j=me.i=me.j=0,s=me.S=[];if(!keylen){key=[keylen++]}while(i<width){s[i]=i++}for(i=0;i<width;i++){s[i]=s[j=mask&j+key[i%keylen]+(t=s[i])];s[j]=t}(me.g=function(count){var t,r=0,i=me.i,j=me.j,s=me.S;while(count--){t=s[i=mask&i+1];r=r*width+s[mask&(s[i]=s[j=mask&j+t])+(s[j]=t)]}me.i=i;me.j=j;return r})(width)}function copy(f,t){t.i=f.i;t.j=f.j;t.S=f.S.slice();return t}function flatten(obj,depth){var result=[],typ=typeof obj,prop;if(depth&&typ=="object"){for(prop in obj){try{result.push(flatten(obj[prop],depth-1))}catch(e){}}}return result.length?result:typ=="string"?obj:obj+"\0"}function mixkey(seed,key){var stringseed=seed+"",smear,j=0;while(j<stringseed.length){key[mask&j]=mask&(smear^=key[mask&j]*19)+stringseed.charCodeAt(j++)}return tostring(key)}function autoseed(){try{var out;if(nodecrypto&&(out=nodecrypto.randomBytes)){out=out(width)}else{out=new Uint8Array(width);(global.crypto||global.msCrypto).getRandomValues(out)}return tostring(out)}catch(e){var browser=global.navigator,plugins=browser&&browser.plugins;return[+new Date,global,plugins,global.screen,tostring(pool)]}}function tostring(a){return String.fromCharCode.apply(0,a)}mixkey(math.random(),pool);if(typeof module=="object"&&module.exports){module.exports=seedrandom;try{nodecrypto=require("crypto")}catch(ex){}}else if(typeof define=="function"&&define.amd){define(function(){return seedrandom})}})([],Math)},{crypto:37}],49:[function(require,module,exports){(function(setImmediate,clearImmediate){(function(){var nextTick=require("process/browser.js").nextTick;var apply=Function.prototype.apply;var slice=Array.prototype.slice;var immediateIds={};var nextImmediateId=0;exports.setTimeout=function(){return new Timeout(apply.call(setTimeout,window,arguments),clearTimeout)};exports.setInterval=function(){return new Timeout(apply.call(setInterval,window,arguments),clearInterval)};exports.clearTimeout=exports.clearInterval=function(timeout){timeout.close()};function Timeout(id,clearFn){this._id=id;this._clearFn=clearFn}Timeout.prototype.unref=Timeout.prototype.ref=function(){};Timeout.prototype.close=function(){this._clearFn.call(window,this._id)};exports.enroll=function(item,msecs){clearTimeout(item._idleTimeoutId);item._idleTimeout=msecs};exports.unenroll=function(item){clearTimeout(item._idleTimeoutId);item._idleTimeout=-1};exports._unrefActive=exports.active=function(item){clearTimeout(item._idleTimeoutId);var msecs=item._idleTimeout;if(msecs>=0){item._idleTimeoutId=setTimeout(function onTimeout(){if(item._onTimeout)item._onTimeout()},msecs)}};exports.setImmediate=typeof setImmediate==="function"?setImmediate:function(fn){var id=nextImmediateId++;var args=arguments.length<2?false:slice.call(arguments,1);immediateIds[id]=true;nextTick(function onNextTick(){if(immediateIds[id]){if(args){fn.apply(null,args)}else{fn.call(null)}exports.clearImmediate(id)}});return id};exports.clearImmediate=typeof clearImmediate==="function"?clearImmediate:function(id){delete immediateIds[id]}}).call(this)}).call(this,require("timers").setImmediate,require("timers").clearImmediate)},{"process/browser.js":40,timers:49}]},{},[2]);
function fileUploadFailed(u,p,e){if(e.indexOf("extension not allowed")>=0){var extensionList=$(u).data("extension")?$(u).data("extension").split(",").join(", "):null;modalToast("That file type is not supported at this time. "+(extensionList?"Please upload a file with one of the following extensions:<br>"+extensionList:""))}else{modalToast(e.replace(/[\s.]*$/,"")+'.<br><a href="/pricing.php" style="color: #ff6633;">Upgrade</a> your plan to allow larger files.<br>We also recommend using a service like <a href="https://ilovepdf.com/" target="_blank" style="color: #5D5FEF">https://ilovepdf.com/</a> to compress large files.')}}function fileUploadInit(callbackSuccess,$uploadNode,callbackStartUploads){if(typeof $uploadNode!=="object"){return false}var uploadSettings={extension:[],autoUpload:true,maxFileSize:0,callbackStartUploads:callbackStartUploads,callbackSuccess:function fileUploaded(u,p){if(typeof callbackSuccess==="function"){callbackSuccess(u.uploadList[p],$uploadNode)}$(".RTU-uploadItem").remove()},callbackError:fileUploadFailed};if($uploadNode.data("extension")){uploadSettings.extension=$uploadNode.data("extension").split(",")}for(var i=0;i<$uploadNode.length;i++){new RealTimeUpload(uploadSettings,$uploadNode.get(i))}}function fileUploadFromUrl(url,inputElement){var $form=$(inputElement).closest("form");var action=$form.attr("action");$.ajax({url:action,data:{url:url},success:function(json){savePdfPreviewRTU(json.data.file)}})}
$(document).on("click",".action-headshotrtu-init",function(){fileUploadInit(previewAndSaveHeadshot,$(this).closest(".action-headshotrtu-container").find(".action-headshotrtu-uploader"))});function removeHeadshot(headshotId){$("form[data-headshot_id="+headshotId+"]").remove()}function deleteHeadshot(headshotId){return $.ajax({url:"/headshot/headshot/delete",type:"POST",data:{headshot_id:headshotId}}).then(function(response){if(response.status==="ok"){removeHeadshot(headshotId);updateCounter(response)}modalClose("toast-confirm")})}function processDefault(headshotId){$(".action-headshot-library-default").prop("checked",false);$("form[data-headshot_id="+headshotId+"]").find(".action-headshot-library-default").prop("checked",true)}$(document).on("change",".action-headshot-library-default",function(){var headshotId=$(this).closest("form").data("headshot_id");return $.ajax({url:"/headshot/headshot/set_default",type:"POST",data:{headshot_id:headshotId}}).then(function(response){if(response.status==="ok")processDefault(headshotId);else modalToast("Oops, something went wrong."+json.message)})});function checkDelete(headshotId){$.ajax({url:"/headshot/headshot/confirm_delete",type:"POST",data:{headshot_id:headshotId},success:function(response){if(response.status==="ok"){modalToastConfirm(response.data["html"],function(){deleteHeadshot(headshotId)},true)}else modalToast(response.message)},error:function(json){console.log("error from checkDelete json is:");console.log(json);modalToast("An error occurred."+json.toString())}});return false}$(document).on("click",".action-headshot-library-delete",function(){return checkDelete($(this).closest("form").data("headshot_id"))});function processCreateHeadshot(json){if(json.status==="ok"){$(".action-headshot-library-container").prepend(json.data["headshot_html_lib_item"]);$(".action-headshot-library-none").fadeOut()}else{if(json.message==="limit")modalToast(json.data["html"]);else modalToast(json.status["message"])}}function createHeadshot(filename,view){return $.ajax({url:"/headshot/headshot/create_headshot",data:{filename:filename,view:view},type:"POST",dataType:"json"})}function updateCounter(json){if(json.status==="ok")if(json.data["count"])$(".action-headshot-library-count").text(json.data["count"])}function imgExtCheck(obj){var fileName=obj.name;var fileExt=fileName.split(".").pop();var imageExtensions=["jpg","jpeg","gif","png"];return imageExtensions.indexOf(fileExt)!==-1}function previewAndSaveHeadshot(obj){if(!imgExtCheck(obj))return modalToast("Headshot images don't support that file type at this time.");createHeadshot(obj.link,"brand_kit").then(function(response){processCreateHeadshot(response);updateCounter(response)})}function previewAndSaveHeadshotForNarration(obj){if(!imgExtCheck(obj))return modalToast("Headshot images don't support that file type at this time.");createHeadshot(obj.link,"narrate").then(function(response){processCreateHeadshot(response);if(response.status==="ok"&&typeof response.data["headshot_id"]!=="undefined")updateHeadshotIdNarration(response.data["headshot_id"],true)})}function updateNarrationHeadshotSrc(json){$(".action-narrationheadshot-container").empty();$(".action-narrationheadshot-container").append(json.data["picture_tag_sml"]);$(".action-narrationheadshot-container").fadeIn();$(".action-headshot-preview").empty();$(".action-headshot-preview").append(json.data["picture_tag_sml"]);$(".action-narration-headshotid").attr("data-headshot_id",json.data["headshot_id"])}$(document).on("click",".action-narrationheadshotlibrary-toggle",function(){if($(".action-headshot-library-container").is(":visible")){$(this).text("Choose from library");$(".action-headshot-library-container").fadeOut()}else{$(this).text("Close library");$(".action-headshot-library-container").fadeIn()}});function processLibrary($this,response){if(response.status==="ok"){if(response.message==="none"){$(".action-headshot-library-none").empty().append(response.data["library_html"]).fadeIn()}else{$(".action-headshot-library-container").empty().append(response.data["library_html"]).fadeIn();$(".action-headshot-library-load").addClass("action-narrationheadshotlibrary-toggle").removeClass("action-headshot-library-load");$this.text("Close library")}}else modalToast("Hm... something went wrong. Please reload and try again.")}$(document).on("click",".action-headshot-library-load",function(){var $this=$(this);return $.ajax({url:"/headshot/headshot/load_library_narration",data:{workpad_id:W["id"],page:getNarrationPage()}}).then(function(response){processLibrary($this,response)})});
function feedbackLoggedOut(){setNotify(0);$(".action-feedback-handlecontainer").fadeOut();$(".action-feedback-anonymouscontainer").fadeIn()}function setNotify(notify){DEV&&console.log("setNotify",notify,"input[name='feedback-notify'] exists?",$("input[name='feedback-notify']").length);if(+notify){$("input[name='feedback-notify']").prop("checked",true);$(".action-notification-belltoggle").addClass("fa-heart-circle-check");$(".action-notification-belltoggle").removeClass("fa-heart-circle-xmark")}else{$("input[name='feedback-notify']").prop("checked",false);$(".action-notification-belltoggle").removeClass("fa-heart-circle-check");$(".action-notification-belltoggle").addClass("fa-heart-circle-xmark")}}function setFeedbackNotify(data){return $.ajax({url:"/account/account_session/set_feedback_notify",type:"POST",data:data})}$(document).on("change","input[name='feedback-notify']",function(){$(".action-feedbacknotify-error").fadeOut();var $form=$(this).closest("form");var notify=$form.find("input[name='feedback-notify']").is(":checked")?1:0;var data={workpad_id:W["id"],notify:notify};setFeedbackNotify(data).then(function(response){if(response.status!=="ok"){modalClose();modalToast("Oops, something went wrong. Please re-try.");console.log(response)}else setNotify(notify)})});
function setSessionFollow(sessionKey){return $.ajax({url:"/account/account_session/set_follow_session",type:"POST",data:{session_key:sessionKey,workpad_key:W["workpad_key"]}})}function setFollow(follow){if(follow){$(".action-follow-toggle").data("following",1);$(".state-follow-off").hide();$(".state-follow-on").fadeIn()}else{$(".action-follow-toggle").data("following",0);$(".state-follow-on").hide();$(".state-follow-off").fadeIn()}if(typeof setNotify=="function"){setNotify(follow)}}function handleFollowResponse(json){var follow=+json.data["follow"];setFollow(follow);if(!follow){modalToast("You stopped following "+W["name"])}}function refreshSession(result){if(result.status==="ok"){$("#iframe-login-follow").remove();$(".action-follow-toggle").data("logged-in",1);setFollow(result.data["follow"]);$(".action-nowfollowing-container").fadeIn();$(".action-follow-logintext").hide();jsLoad("https://"+BASE_DOMAIN+"/js/publish_logout.js",typeof logoutSessionPublish);$("#iframe-login-feedback").remove();$(".action-notify-username").text(result.data["username"]);setNotify(result.data["notify"]);$(".action-notify-container").fadeIn()}else{modalToast("Oops, something went wrong. Please re-try.");DEV&&console.log(result)}}window.addEventListener("message",event=>{console.log("follow message event: session_key: ",event.data.session_key);var pattern=/^https:\/\/.*(simplebooklet|louddoc)\.com$/;if(!pattern.test(event.origin)){return}if(event.data.session_key){setSessionFollow(event.data.session_key).done(function(result){refreshSession(result)})}});function toggleFollow(data){return $.ajax({url:"/account/account_follower/set_follow_author",type:"POST",data:data,beforeSend:ajaxBefore,complete:ajaxComplete})}$(document).on("click",".action-follow-toggle",function(){var isLoggedIn=$(this).data("logged-in");var currentFollowState=$(this).data("following");var data={workpad_id:W["id"],follow:currentFollowState?0:1};if(!isLoggedIn){modalOpen("public-task-follow")}else{if(currentFollowState){modalOpen("public-task-follow")}else{toggleFollow(data).then(function(json){modalOpen("public-task-follow");handleFollowResponse(json)})}}});$(document).on("click",".action-follow-unfollowwp",function(){var data={workpad_id:W["id"],follow:0};toggleFollow(data).then(function(json){modalClose();handleFollowResponse(json)})});function handleCollectionUnfollowResponse(data,json){if(json.status==="ok"){var $collectionContainer=$(".action-mycollection-wpcontainer[data-workpad-key="+data.workpad_key+"]");var $authorNode=$collectionContainer.closest(".action-mycollection-authortitle");$collectionContainer.remove();if(!$authorNode.find(".action-mycollection-wpcontainer").length){$authorNode.remove()}}else{modalToast("Sorry, we didn't get that. Please reload and try again")}}function confirmUnfollow(data){toggleFollow(data).then(function(json){handleCollectionUnfollowResponse(data,json)})}$(document).on("click",".action-mycollection-unfollowwp",function(){var data={workpad_key:$(this).data("workpad-key"),workpad_id:$(this).data("workpad-id")};modalToastConfirm("Are you sure you want to remove this from your following?",function(){confirmUnfollow(data)})});function unFollowAuthor(data){return $.ajax({url:"/account/account_follower/unfollow_author",type:"POST",data:data,beforeSend:ajaxBefore,complete:ajaxComplete})}function handleUnFollowAuthor(data,json){if(json.status==="ok"){$(".action-mycollection-wpcontainer[data-account-id="+data.author_account_id+"]").remove();$(".action-mycollection-authortitle[data-account-id="+data.author_account_id+"]").remove()}else{modalToast("Sorry, we didn't get that. Please reload and try again")}}function confirmUnfollowAuthor(data){unFollowAuthor(data).then(function(json){handleUnFollowAuthor(data,json)})}$(document).on("mouseenter",".action-mycollection-unfollowccounttext",function(){$(this).find(".follow-icon i").removeClass("fa-duotone").addClass("fa-solid fa-heart-crack red-text");$(this).find(".text-unfollow").show();$(this).find(".text-following").hide()});$(document).on("mouseleave",".action-mycollection-unfollowccounttext",function(){$(this).find(".follow-icon i").removeClass("fa-solid fa-heart-crack red-text").addClass("fa-duotone");$(this).find(".text-unfollow").hide();$(this).find(".text-following").show()});$(document).ready(function(){$(".action-mycollection-unfollowccounttext .text-unfollow").hide()});$(document).on("click",".action-mycollection-unfollowaccount",function(){var data={author_account_id:$(this).data("account-id")};modalToastConfirm("Are you sure you want to unfollow this author and all their work?",function(){confirmUnfollowAuthor(data)})});function confirmDeleteAccount(){return $.ajax({url:"/account/account_update/delete",type:"POST",data:{delete_reason:"This is an account delete from following.php"},beforeSend:ajaxBefore,complete:ajaxComplete})}$(document).on("click",".action-following-deleteaccount",function(){modalToastConfirm("Are you sure you want to delete your account and lose access to this collection?",function(){confirmDeleteAccount().done(function(response){if(response.status==="ok"){modalToast("Your account has been deleted.",function(){logoutAction("/logout.php")})}else{modalToast(response.message)}})})});
